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 相关文章推荐
rhythmbox中文名乱码问题解决方法
Sep 06 Python
Python中Class类用法实例分析
Nov 12 Python
Linux中安装Python的交互式解释器IPython的教程
Jun 13 Python
详解Python使用tensorflow入门指南
Feb 09 Python
Python之用户输入的实例
Jun 22 Python
Python弹出输入框并获取输入值的实例
Jun 18 Python
Python定时任务工具之APScheduler使用方式
Jul 24 Python
Pycharm中切换pytorch的环境和配置的教程详解
Mar 13 Python
在tensorflow实现直接读取网络的参数(weight and bias)的值
Jun 24 Python
基于Python实现简单学生管理系统
Jul 24 Python
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
May 22 Python
Pyqt5将多个类组合在一个界面显示的完整示例
Sep 04 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 在线翻译函数代码
2009/05/07 PHP
PHP中使用mpdf 导出PDF文件的实现方法
2018/10/22 PHP
自制基于jQuery的智能提示插件一枚
2011/02/18 Javascript
JS正则中的RegExp对象对象
2012/11/07 Javascript
Javascript实现滑块滑动改变值的实现代码
2013/04/12 Javascript
jQuery封装的获取Url中的Get参数示例
2013/11/26 Javascript
javascript类型转换使用方法
2014/02/08 Javascript
js友好的时间返回函数
2016/08/24 Javascript
纯JS代码实现隔行变色鼠标移入高亮
2016/11/23 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
JS实现线性表的顺序表示方法示例【经典数据结构】
2017/04/11 Javascript
阿里大于短信验证码node koa2的实现代码(最新)
2017/09/07 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
2020/08/09 Javascript
基于es6三点运算符的使用方法(实例讲解)
2017/10/12 Javascript
Node.js之删除文件夹(含递归删除)代码实例
2019/09/09 Javascript
Vue Object 的变化侦测实现代码
2020/04/15 Javascript
JavaScript undefined及null区别实例解析
2020/07/21 Javascript
jQuery实现动态操作table行
2020/11/23 jQuery
[01:08]2014DOTA2展望TI 剑指西雅图LGD战队专访
2014/06/30 DOTA
[41:52]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第二场 2月22日
2021/03/11 DOTA
Python中的Matplotlib模块入门教程
2015/04/15 Python
python调用fortran模块
2016/04/08 Python
Python检查和同步本地时间(北京时间)的实现方法
2018/12/03 Python
从运行效率与开发效率比较Python和C++
2018/12/14 Python
pytorch标签转onehot形式实例
2020/01/02 Python
使用python自动追踪你的快递(物流推送邮箱)
2020/03/17 Python
Python使用plt.boxplot() 参数绘制箱线图
2020/06/04 Python
美国汽配连锁巨头Pep Boys官网:轮胎更换、汽车维修服务和汽车零部件
2017/01/14 全球购物
医药专业应届毕业生求职信范文
2014/01/01 职场文书
财务人员的自我评价范文
2014/03/03 职场文书
中药学专业毕业生推荐信
2014/07/10 职场文书
简历自荐信范文
2015/03/09 职场文书
安全第一课观后感
2015/06/18 职场文书
MySQL系列之三 基础篇
2021/07/02 MySQL
vue里使用create, mounted调用方法
2022/04/26 Vue.js
MySQL范围查询优化的场景实例详解
2022/06/10 MySQL