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爬虫中有中文的url问题
May 11 Python
Python登录注册验证功能实现
Jun 18 Python
Python 获取中文字拼音首个字母的方法
Nov 28 Python
通过python的matplotlib包将Tensorflow数据进行可视化的方法
Jan 09 Python
用pycharm开发django项目示例代码
Jun 13 Python
pytorch中使用cuda扩展的实现示例
Feb 12 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
Mar 30 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
May 19 Python
Python如何在main中调用函数内的函数方式
Jun 01 Python
django数据模型中null和blank的区别说明
Sep 02 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
Jan 08 Python
使用豆瓣源来安装python中的第三方库方法
Jan 26 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制作静态网站的模板框架(一)
2006/10/09 PHP
PHP实现生成唯一编号(36进制的不重复编号)
2014/07/01 PHP
为你总结一些php信息函数
2015/10/21 PHP
ThinkPHP5 验证器的具体使用
2018/05/31 PHP
JavaScript 模拟类机制及私有变量的方法及思路
2013/07/10 Javascript
js定时器怎么写?就是在特定时间执行某段程序
2013/10/11 Javascript
使用JQUERY进行后台页面布局控制DIV实现左右式
2014/01/07 Javascript
关于javaScript注册click事件传递参数的不成功问题
2014/07/18 Javascript
JavaScript中对象介绍
2014/12/31 Javascript
javascript的理解及经典案例分析
2016/05/20 Javascript
JavaScript运动框架 解决速度正负取整问题(一)
2017/05/17 Javascript
JavaScript设置名字输入不合法的实现方法
2017/05/23 Javascript
select自定义小三角样式代码(实用总结)
2017/08/18 Javascript
vue.js单文件组件中非父子组件的传值实例
2018/09/13 Javascript
vue+elementUi 实现密码显示/隐藏+小图标变化功能
2020/01/18 Javascript
vue 使用async写数字动态加载效果案例
2020/07/18 Javascript
[01:06]DOTA2隆重推出2016冬季勇士令状 内含上海特级锦标赛互动指南
2016/02/17 DOTA
玩转python爬虫之爬取糗事百科段子
2016/02/17 Python
python下实现二叉堆以及堆排序的示例
2017/09/29 Python
Python实现的多线程同步与互斥锁功能示例
2017/11/30 Python
解决matplotlib库show()方法不显示图片的问题
2018/05/24 Python
Python设置在shell脚本中自动补全功能的方法
2018/06/25 Python
浅谈pycharm下找不到sqlalchemy的问题
2018/12/03 Python
python读取.mat文件的数据及实例代码
2019/07/12 Python
python代码xml转txt实例
2020/03/10 Python
keras的load_model实现加载含有参数的自定义模型
2020/06/22 Python
amazeui页面校验功能的实现代码
2020/08/24 HTML / CSS
马来西亚网上美容店:Hermo.my
2017/11/25 全球购物
乐天旅游香港网站:日本饭店预订
2017/11/29 全球购物
澳大利亚在线生活方式商店:Mytopia
2018/07/08 全球购物
测量实习生自我鉴定
2013/09/19 职场文书
教师实习自我鉴定
2013/12/11 职场文书
2014流动人口计划生育工作总结
2014/12/20 职场文书
技术支持岗位职责
2015/02/13 职场文书
何玥事迹观后感
2015/06/16 职场文书
Redis主从复制操作和配置详情
2022/09/23 Redis