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基于回溯法子集树模板解决马踏棋盘问题示例
Sep 11 Python
Python实现霍夫圆和椭圆变换代码详解
Jan 12 Python
Python 数据处理库 pandas 入门教程基本操作
Apr 19 Python
便捷提取python导入包的属性方法
Oct 15 Python
Python3批量生成带logo的二维码方法
Jun 24 Python
Python实现的ftp服务器功能详解【附源码下载】
Jun 26 Python
解决Python安装时报缺少DLL问题【两种解决方法】
Jul 15 Python
解决Django中调用keras的模型出现的问题
Aug 07 Python
python3 实现的对象与json相互转换操作示例
Aug 17 Python
python绘制彩虹图
Dec 16 Python
python语言的优势是什么
Jun 17 Python
Python3.9.1中使用match方法详解
Feb 08 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
PHP 和 HTML
2006/10/09 PHP
apache2.2.4+mysql5.0.77+php5.2.8安装精简
2009/04/29 PHP
关于php支持分块与断点续传文件下载功能代码
2014/05/09 PHP
创建无限极分类树型结构的简单方法
2017/06/20 PHP
php将字符串转换为数组实例讲解
2020/05/05 PHP
javascript 装载iframe子页面,自适应高度
2009/03/20 Javascript
JavaScript获取GridView中用户点击控件的行号,列号
2009/04/14 Javascript
在jQuery 1.5中使用deferred对象的代码(翻译)
2011/03/10 Javascript
node.js中的fs.writeFileSync方法使用说明
2014/12/14 Javascript
详解Bootstrap四种图片样式
2016/01/04 Javascript
JavaScript中的Array 对象(数组对象)
2016/06/02 Javascript
javascript 小数乘法结果错误的处理方法
2016/07/28 Javascript
JS判断鼠标进入容器的方向与window.open新窗口被拦截的问题
2016/12/23 Javascript
vue iview实现动态路由和权限验证功能
2018/04/17 Javascript
express如何解决ajax跨域访问session失效问题详解
2019/06/20 Javascript
vue项目实现设置根据路由高亮对应的菜单项操作
2020/08/06 Javascript
Python使用微信SDK实现的微信支付功能示例
2017/06/30 Python
Python基于回溯法子集树模板解决全排列问题示例
2017/09/07 Python
Atom的python插件和常用插件说明
2018/07/08 Python
TensorFlow索引与切片的实现方法
2019/11/20 Python
python实现测试工具(二)——简单的ui测试工具
2020/10/19 Python
华润集团网上药店:健一网
2016/09/19 全球购物
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
中科创达面试题
2016/12/28 面试题
外企测试工程师面试题
2015/02/01 面试题
进口业务员岗位职责
2014/04/06 职场文书
ktv筹备计划书
2014/05/03 职场文书
房地产端午节活动方案
2014/08/24 职场文书
管辖权异议上诉状
2015/05/23 职场文书
关于运动会的宣传稿
2015/07/23 职场文书
企业法人任命书
2015/09/21 职场文书
2016年五四青年节校园广播稿
2015/12/17 职场文书
党员心得体会范文2016
2016/01/23 职场文书
导游词之安徽巢湖
2019/12/26 职场文书
《悲惨世界》:比天空更广阔的是人的心灵
2020/01/16 职场文书
Python利用FlashText算法实现替换字符串
2022/03/31 Python