pytorch + visdom 处理简单分类问题的示例


Posted in Python onJune 04, 2018

环境

系统 : win 10
显卡:gtx965m
cpu :i7-6700HQ
python 3.61
pytorch 0.3

包引用

import torch
from torch.autograd import Variable
import torch.nn.functional as F
import numpy as np
import visdom
import time
from torch import nn,optim

数据准备

use_gpu = True
ones = np.ones((500,2))
x1 = torch.normal(6*torch.from_numpy(ones),2)
y1 = torch.zeros(500) 
x2 = torch.normal(6*torch.from_numpy(ones*[-1,1]),2)
y2 = y1 +1
x3 = torch.normal(-6*torch.from_numpy(ones),2)
y3 = y1 +2
x4 = torch.normal(6*torch.from_numpy(ones*[1,-1]),2)
y4 = y1 +3 

x = torch.cat((x1, x2, x3 ,x4), 0).float()
y = torch.cat((y1, y2, y3, y4), ).long()

可视化如下看一下:

pytorch + visdom 处理简单分类问题的示例

visdom可视化准备

先建立需要观察的windows

viz = visdom.Visdom()
colors = np.random.randint(0,255,(4,3)) #颜色随机
#线图用来观察loss 和 accuracy
line = viz.line(X=np.arange(1,10,1), Y=np.arange(1,10,1))
#散点图用来观察分类变化
scatter = viz.scatter(
  X=x,
  Y=y+1, 
  opts=dict(
    markercolor = colors,
    marksize = 5,
    legend=["0","1","2","3"]),)
#text 窗口用来显示loss 、accuracy 、时间
text = viz.text("FOR TEST")
#散点图做对比
viz.scatter(
  X=x,
  Y=y+1, 
  opts=dict(
    markercolor = colors,
    marksize = 5,
    legend=["0","1","2","3"]
  ),
)

效果如下:

pytorch + visdom 处理简单分类问题的示例

逻辑回归处理

输入2,输出4

logstic = nn.Sequential(
  nn.Linear(2,4)
)

gpu还是cpu选择:

if use_gpu:
  gpu_status = torch.cuda.is_available()
  if gpu_status:
    logstic = logstic.cuda()
    # net = net.cuda()
    print("###############使用gpu##############")
  else : print("###############使用cpu##############")
else:
  gpu_status = False
  print("###############使用cpu##############")

优化器和loss函数:

loss_f = nn.CrossEntropyLoss()
optimizer_l = optim.SGD(logstic.parameters(), lr=0.001)

训练2000次:

start_time = time.time()
time_point, loss_point, accuracy_point = [], [], []
for t in range(2000):
  if gpu_status:
    train_x = Variable(x).cuda()
    train_y = Variable(y).cuda()
  else:
    train_x = Variable(x)
    train_y = Variable(y)
  # out = net(train_x)
  out_l = logstic(train_x)
  loss = loss_f(out_l,train_y)
  optimizer_l.zero_grad()
  loss.backward()
  optimizer_l.step()

训练过成观察及可视化:

if t % 10 == 0:
  prediction = torch.max(F.softmax(out_l, 1), 1)[1]
  pred_y = prediction.data
  accuracy = sum(pred_y ==train_y.data)/float(2000.0)
  loss_point.append(loss.data[0])
  accuracy_point.append(accuracy)
  time_point.append(time.time()-start_time)
  print("[{}/{}] | accuracy : {:.3f} | loss : {:.3f} | time : {:.2f} ".format(t + 1, 2000, accuracy, loss.data[0],
                                  time.time() - start_time))
  viz.line(X=np.column_stack((np.array(time_point),np.array(time_point))),
       Y=np.column_stack((np.array(loss_point),np.array(accuracy_point))),
       win=line,
       opts=dict(legend=["loss", "accuracy"]))
   #这里的数据如果用gpu跑会出错,要把数据换成cpu的数据 .cpu()即可
  viz.scatter(X=train_x.cpu().data, Y=pred_y.cpu()+1, win=scatter,name="add",
        opts=dict(markercolor=colors,legend=["0", "1", "2", "3"]))
  viz.text("<h3 align='center' style='color:blue'>accuracy : {}</h3><br><h3 align='center' style='color:pink'>"
       "loss : {:.4f}</h3><br><h3 align ='center' style='color:green'>time : {:.1f}</h3>"
       .format(accuracy,loss.data[0],time.time()-start_time),win =text)

我们先用cpu运行一次,结果如下:

pytorch + visdom 处理简单分类问题的示例

然后用gpu运行一下,结果如下:

pytorch + visdom 处理简单分类问题的示例

发现cpu的速度比gpu快很多,但是我听说机器学习应该是gpu更快啊,百度了一下,知乎上的答案是:

pytorch + visdom 处理简单分类问题的示例

我的理解就是gpu在处理图片识别大量矩阵运算等方面运算能力远高于cpu,在处理一些输入和输出都很少的,还是cpu更具优势。

添加神经层:

net = nn.Sequential(
  nn.Linear(2, 10),
  nn.ReLU(),  #激活函数
  nn.Linear(10, 4)
)

添加一层10单元神经层,看看效果是否会有所提升:

使用cpu:

pytorch + visdom 处理简单分类问题的示例 

使用gpu:

pytorch + visdom 处理简单分类问题的示例

比较观察,似乎并没有什么区别,看来处理简单分类问题(输入,输出少)的问题,神经层和gpu不会对机器学习加持。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python构建Hopfield网络的教程
Apr 14 Python
Python操作MongoDB数据库PyMongo库使用方法
Apr 27 Python
使用Python编写简单的端口扫描器的实例分享
Dec 18 Python
CentOS下使用yum安装python-pip失败的完美解决方法
Aug 16 Python
Python数据结构与算法之完全树与最小堆实例
Dec 13 Python
Linux CentOS7下安装python3 的方法
Jan 21 Python
python实时获取外部程序输出结果的方法
Jan 12 Python
python递归法解决棋盘分割问题
Jul 17 Python
PyQt5事件处理之定时在控件上显示信息的代码
Mar 25 Python
Python如何实现邮件功能
May 27 Python
Qt自定义Plot实现曲线绘制的详细过程
Nov 02 Python
Django框架中视图的用法
Jun 10 Python
numpy中以文本的方式存储以及读取数据方法
Jun 04 #Python
浅谈python中np.array的shape( ,)与( ,1)的区别
Jun 04 #Python
Numpy array数据的增、删、改、查实例
Jun 04 #Python
python实现判断一个字符串是否是合法IP地址的示例
Jun 04 #Python
pytorch + visdom CNN处理自建图片数据集的方法
Jun 04 #Python
python验证码识别教程之滑动验证码
Jun 04 #Python
python验证码识别教程之利用投影法、连通域法分割图片
Jun 04 #Python
You might like
一个连接两个不同MYSQL数据库的PHP程序
2006/10/09 PHP
解决PhpStorm64不能启动的问题
2020/06/20 PHP
Extjs列表详细信息窗口新建后自动加载解决方法
2010/04/02 Javascript
javascript实现跳转菜单的具体方法
2013/07/05 Javascript
JS获取select的value和text值的简单实例
2014/02/26 Javascript
浅谈JavaScript字符集
2014/05/22 Javascript
jquery Validation表单验证使用详解
2020/09/12 Javascript
实例代码详解jquery.slides.js
2015/11/16 Javascript
Jquery插件仿百度搜索关键字自动匹配功能
2016/05/11 Javascript
浅析JavaScript函数的调用模式
2016/08/10 Javascript
微信小程序 页面跳转和数据传递实例详解
2017/01/19 Javascript
微信小程序 聊天室简单实现
2017/04/19 Javascript
你知道JavaScript Symbol类型怎么用吗
2020/01/08 Javascript
javascrpt密码强度校验函数详解
2020/03/18 Javascript
python发布模块的步骤分享
2014/02/21 Python
Python使用内置json模块解析json格式数据的方法
2017/07/20 Python
Python OpenCV获取视频的方法
2018/02/28 Python
python 随机打乱 图片和对应的标签方法
2018/12/14 Python
python实现转圈打印矩阵
2019/03/02 Python
Python CVXOPT模块安装及使用解析
2019/08/01 Python
python异常触发及自定义异常类解析
2019/08/06 Python
python正则表达式实例代码
2020/03/03 Python
python3用urllib抓取贴吧邮箱和QQ实例
2020/03/10 Python
Matplotlib使用Cursor实现UI定位的示例代码
2020/03/12 Python
Html5原创俄罗斯方块(基于canvas)
2019/01/07 HTML / CSS
挪威户外活动服装和装备购物网站:Bergfreunde挪威
2016/10/20 全球购物
英国文具、办公用品和科技商店:Ryman
2018/09/27 全球购物
N.Peal官网:来自伦敦的高档羊绒品牌
2018/10/29 全球购物
菲律宾优惠券网站:MetroDeal
2019/04/12 全球购物
日本最大化妆品和美容产品的综合口碑网站:cosme shopping
2019/08/28 全球购物
澳洲CFL商城:CHEMIST FOR LESS(中文)
2021/02/28 全球购物
国际商务专业职业生涯规划书范文
2014/01/17 职场文书
体育课课后反思
2014/04/24 职场文书
2014年学校党建工作汇报材料
2014/11/02 职场文书
第一书记观后感
2015/06/08 职场文书
CSS基础详解
2021/10/16 HTML / CSS