Pytorch 搭建分类回归神经网络并用GPU进行加速的例子


Posted in Python onJanuary 09, 2020

分类网络

import torch
import torch.nn.functional as F
from torch.autograd import Variable
import matplotlib.pyplot as plt

# 构造数据
n_data = torch.ones(100, 2)
x0 = torch.normal(3*n_data, 1)
x1 = torch.normal(-3*n_data, 1)
# 标记为y0=0,y1=1两类标签
y0 = torch.zeros(100)
y1 = torch.ones(100)

# 通过.cat连接数据
x = torch.cat((x0, x1), 0).type(torch.FloatTensor)
y = torch.cat((y0, y1), 0).type(torch.LongTensor)

# .cuda()会将Variable数据迁入GPU中
x, y = Variable(x).cuda(), Variable(y).cuda()

# plt.scatter(x.data.cpu().numpy()[:, 0], x.data.cpu().numpy()[:, 1], c=y.data.cpu().numpy(), s=100, lw=0, cmap='RdYlBu')
# plt.show()

# 网络构造方法一
class Net(torch.nn.Module):
 def __init__(self, n_feature, n_hidden, n_output):
 super(Net, self).__init__()
 # 隐藏层的输入和输出
 self.hidden1 = torch.nn.Linear(n_feature, n_hidden)
 self.hidden2 = torch.nn.Linear(n_hidden, n_hidden)
 # 输出层的输入和输出
 self.out = torch.nn.Linear(n_hidden, n_output)

 def forward(self, x):
 x = F.relu(self.hidden2(self.hidden1(x)))
 x = self.out(x)
 return x

# 初始化一个网络,1个输入层,10个隐藏层,1个输出层
net = Net(2, 10, 2)

# 网络构造方法二
'''
net = torch.nn.Sequential(
 torch.nn.Linear(2, 10),
 torch.nn.Linear(10, 10),
 torch.nn.ReLU(),
 torch.nn.Linear(10, 2),
)
'''
# .cuda()将网络迁入GPU中
net.cuda()
# 配置网络优化器
optimizer = torch.optim.SGD(net.parameters(), lr=0.2)
# SGD: torch.optim.SGD(net.parameters(), lr=0.01)
# Momentum: torch.optim.SGD(net.parameters(), lr=0.01, momentum=0.8)
# RMSprop: torch.optim.RMSprop(net.parameters(), lr=0.01, alpha=0.9)
# Adam: torch.optim.Adam(net.parameters(), lr=0.01, betas=(0.9, 0.99))

loss_func = torch.nn.CrossEntropyLoss()

# 动态可视化
plt.ion()
plt.show()

for t in range(300):
 print(t)
 out = net(x)
 loss = loss_func(out, y)
 optimizer.zero_grad()
 loss.backward()
 optimizer.step()
 if t % 5 == 0:
 plt.cla()
 prediction = torch.max(F.softmax(out, dim=0), 1)[1].cuda()
 # GPU中的数据无法被matplotlib利用,需要用.cpu()将数据从GPU中迁出到CPU中
 pred_y = prediction.data.cpu().numpy().squeeze()
 target_y = y.data.cpu().numpy()
 plt.scatter(x.data.cpu().numpy()[:, 0], x.data.cpu().numpy()[:, 1], c=pred_y, s=100, lw=0, cmap='RdYlBu')
 accuracy = sum(pred_y == target_y) / 200
 plt.text(1.5, -4, 'accuracy=%.2f' % accuracy, fontdict={'size':20, 'color':'red'})
 plt.pause(0.1)

plt.ioff()
plt.show()

Pytorch 搭建分类回归神经网络并用GPU进行加速的例子

回归网络

import torch
import torch.nn.functional as F
from torch.autograd import Variable
import matplotlib.pyplot as plt

# 构造数据
x = torch.unsqueeze(torch.linspace(-1,1,100), dim=1)
y = x.pow(2) + 0.2*torch.rand(x.size())

# .cuda()会将Variable数据迁入GPU中
x, y = Variable(x).cuda(), Variable(y).cuda()

# plt.scatter(x.data.numpy(), y.data.numpy())
# plt.show()

# 网络构造方法一
class Net(torch.nn.Module):
 def __init__(self, n_feature, n_hidden, n_output):
 super(Net, self).__init__()
 # 隐藏层的输入和输出
 self.hidden = torch.nn.Linear(n_feature, n_hidden)
 # 输出层的输入和输出
 self.predict = torch.nn.Linear(n_hidden, n_output)

 def forward(self, x):
 x = F.relu(self.hidden(x))
 x = self.predict(x)
 return x
 
# 初始化一个网络,1个输入层,10个隐藏层,1个输出层
net = Net(1, 10, 1)

# 网络构造方法二
'''
net = torch.nn.Sequential(
 torch.nn.Linear(1, 10),
 torch.nn.ReLU(),
 torch.nn.Linear(10, 1),
)
'''

# .cuda()将网络迁入GPU中
net.cuda()
# 配置网络优化器
optimizer = torch.optim.SGD(net.parameters(), lr=0.5)
# SGD: torch.optim.SGD(net.parameters(), lr=0.01)
# Momentum: torch.optim.SGD(net.parameters(), lr=0.01, momentum=0.8)
# RMSprop: torch.optim.RMSprop(net.parameters(), lr=0.01, alpha=0.9)
# Adam: torch.optim.Adam(net.parameters(), lr=0.01, betas=(0.9, 0.99))

loss_func = torch.nn.MSELoss()

# 动态可视化
plt.ion()
plt.show()

for t in range(300):
 prediction = net(x)
 loss = loss_func(prediction, y)
 optimizer.zero_grad()
 loss.backward()
 optimizer.step()
 if t % 5 == 0 :
 plt.cla()
 # GPU中的数据无法被matplotlib利用,需要用.cpu()将数据从GPU中迁出到CPU中
 plt.scatter(x.data.cpu().numpy(), y.data.cpu().numpy())
 plt.plot(x.data.cpu().numpy(), prediction.data.cpu().numpy(), 'r-', lw=5)
 plt.text(0.5, 0, 'Loss=%.4f' % loss.item(), fontdict={'size':20, 'color':'red'})
 plt.pause(0.1)

plt.ioff()
plt.show()

Pytorch 搭建分类回归神经网络并用GPU进行加速的例子

以上这篇Pytorch 搭建分类回归神经网络并用GPU进行加速的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python加密方法小结【md5,base64,sha1】
Jul 13 Python
django开发教程之利用缓存文件进行页面缓存的方法
Nov 10 Python
Python实现购物车功能的方法分析
Nov 10 Python
Python下载网络文本数据到本地内存的四种实现方法示例
Feb 05 Python
python 按照固定长度分割字符串的方法小结
Apr 30 Python
python实现泊松图像融合
Jul 26 Python
python实现单链表中删除倒数第K个节点的方法
Sep 28 Python
python安装pywin32clipboard的操作方法
Jan 24 Python
python 定时任务去检测服务器端口是否通的实例
Jan 26 Python
python设计tcp数据包协议类的例子
Jul 23 Python
利用Tensorflow的队列多线程读取数据方式
Feb 05 Python
如何使用repr调试python程序
Feb 28 Python
使用PyTorch训练一个图像分类器实例
Jan 08 #Python
pytorch 实现将自己的图片数据处理成可以训练的图片类型
Jan 08 #Python
pytorch下大型数据集(大型图片)的导入方式
Jan 08 #Python
Python 实现训练集、测试集随机划分
Jan 08 #Python
Pyecharts绘制全球流向图的示例代码
Jan 08 #Python
PyTorch 解决Dataset和Dataloader遇到的问题
Jan 08 #Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
Jan 08 #Python
You might like
PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
2011/11/10 PHP
PHP实现微信发红包程序
2015/08/24 PHP
PHP实现PDO操作mysql存储过程示例
2019/02/13 PHP
基于ThinkPHP删除目录及目录文件函数
2020/10/28 PHP
开发跨浏览器javascript常见注意事项
2009/01/01 Javascript
基于jQuery的动态表格插件
2011/03/28 Javascript
jQuery 自定义函数写法分享
2012/03/30 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
使用Jquery实现每日签到功能
2015/04/03 Javascript
js实现的动画导航菜单效果代码
2015/09/10 Javascript
深入浅析NodeJs并发异步的回调处理
2015/12/21 NodeJs
通过JS获取Request.QueryString()参数的值实现方法
2016/09/27 Javascript
jQuery插件扩展实例【添加回调函数】
2016/11/26 Javascript
extjs简介_动力节点Java学院整理
2017/07/17 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
2017/08/08 jQuery
Vue axios全局拦截 get请求、post请求、配置请求的实例代码
2018/11/28 Javascript
vue实现todolist功能、todolist组件拆分及todolist的删除功能
2019/04/11 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
js实现打字小游戏
2019/12/17 Javascript
详解Vue的组件中data选项为什么必须是函数
2020/08/17 Javascript
Python脚本实现格式化css文件
2015/04/08 Python
在Python的一段程序中如何使用多次事件循环详解
2017/09/07 Python
Python3用tkinter和PIL实现看图工具
2018/06/21 Python
python实现输出一个序列的所有子序列示例
2019/11/18 Python
Python中有几个关键字
2020/06/04 Python
Python函数__new__及__init__作用及区别解析
2020/08/31 Python
Python 如何实现数据库表结构同步
2020/09/29 Python
python 使用csv模块读写csv格式文件的示例
2020/12/02 Python
Schecker荷兰:狗狗用品和配件
2019/06/06 全球购物
英国排名第一的停车场运营商:NCP
2019/08/26 全球购物
业务总经理岗位职责
2014/02/03 职场文书
干部个人对照检查材料
2014/08/25 职场文书
大学生入党自荐书
2015/03/05 职场文书
《爬天都峰》教学反思
2016/02/23 职场文书
java基础——多线程
2021/07/03 Java/Android
深入解析MySQL索引数据结构
2021/10/16 MySQL