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网络编程之TCP通信实例和socketserver框架使用例子
Apr 25 Python
Python中tell()方法的使用详解
May 24 Python
python实现的用于搜索文件并进行内容替换的类实例
Jun 28 Python
Python实现的破解字符串找茬游戏算法示例
Sep 25 Python
Python编程之Re模块下的函数介绍
Oct 28 Python
Python字典数据对象拆分的简单实现方法
Dec 05 Python
Python温度转换实例分析
Jan 17 Python
解决tensorflow模型参数保存和加载的问题
Jul 26 Python
python 不同方式读取文件速度不同的实例
Nov 09 Python
PyCharm专业最新版2019.1安装步骤(含激活码)
Oct 09 Python
python FTP编程基础入门
Feb 27 Python
python3使用diagrams绘制架构图的步骤
Apr 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
ThinkPHP关于session的操作方法汇总
2014/07/18 PHP
php字符串替换函数substr_replace()用法实例
2015/03/17 PHP
Ajax+Jpgraph实现的动态折线图功能示例
2019/02/11 PHP
编写兼容IE和FireFox的脚本
2009/05/18 Javascript
你不知道的高性能JAVASCRIPT
2016/01/18 Javascript
Bootstrap下拉菜单样式
2017/02/07 Javascript
浅谈原型对象的常用开发模式
2017/07/22 Javascript
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
2018/07/13 Javascript
详解如何在webpack中做预渲染降低首屏空白时间
2018/08/22 Javascript
Vue实现移动端页面切换效果【推荐】
2018/11/13 Javascript
vue 移动端适配方案详解
2018/11/15 Javascript
Vue的编码技巧与规范使用详解
2019/08/28 Javascript
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
2020/04/30 jQuery
[02:41]DOTA2英雄基础教程 亚巴顿
2014/01/02 DOTA
[54:10]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
Python迭代器和生成器介绍
2015/03/06 Python
python 远程统计文件代码分享
2015/05/14 Python
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
python绘制雪景图
2019/12/16 Python
推荐8款常用的Python GUI图形界面开发框架
2020/02/23 Python
pytorch中的weight-initilzation用法
2020/06/24 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
2020/07/14 Python
python实现猜拳游戏项目
2020/11/30 Python
草莓网美国官网:Strawberrynet USA
2016/12/11 全球购物
阿联酋手表和配饰购物网站:Rivolishop
2019/11/25 全球购物
意大利和国际最佳时尚品牌:Drestige
2019/12/28 全球购物
护士见习期自我鉴定
2014/02/08 职场文书
平面设计求职信
2014/03/10 职场文书
终止合同协议书
2014/04/17 职场文书
对外汉语专业大学生职业生涯规划书
2014/10/11 职场文书
先进事迹材料范文
2014/12/29 职场文书
2015仓库保管员年终工作总结
2015/05/13 职场文书
2015年音乐教师个人工作总结
2015/05/20 职场文书
background-position百分比原理详解
2021/05/08 HTML / CSS
一文弄懂MySQL中redo log与binlog的区别
2022/02/15 MySQL
Java无向树分析 实现最小高度树
2022/04/09 Javascript