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操作mongodb根据_id查询数据的实现方法
May 20 Python
Python检测一个对象是否为字符串类的方法
May 21 Python
Django中URLconf和include()的协同工作方法
Jul 20 Python
Python中Selenium模拟JQuery滑动解锁实例
Jul 26 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
May 30 Python
解决python3读取Python2存储的pickle文件问题
Oct 25 Python
python矩阵的转置和逆转实例
Dec 12 Python
python 模拟创建seafile 目录操作示例
Sep 26 Python
python数据爬下来保存的位置
Feb 17 Python
pycharm 代码自动补全的实现方法(图文)
Sep 18 Python
python PIL模块的基本使用
Sep 29 Python
mac系统下安装pycharm、永久激活、中文汉化详细教程
Nov 24 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学习笔记之 函数声明(二)
2011/06/09 PHP
php中使用__autoload()自动加载未定义类的实现代码
2013/02/06 PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
2014/11/05 PHP
PHP之sprintf函数用法详解
2014/11/12 PHP
遍历jquery对象的代码分享
2011/11/02 Javascript
getElementByIdx_x js自定义getElementById函数
2012/01/24 Javascript
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
2012/10/11 Javascript
一些常用弹出窗口/拖放/异步文件上传等实用代码
2013/01/06 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
2013/04/11 Javascript
利用javaScript实现点击输入框弹出窗体选择信息
2013/12/11 Javascript
jquery图片轮播特效代码分享
2020/04/20 Javascript
JavaScript 总结几个提高性能知识点(推荐)
2017/02/20 Javascript
Bootstrap表单制作代码
2017/03/17 Javascript
Angular 4依赖注入学习教程之ValueProvider的使用(七)
2017/06/04 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
2017/06/09 Javascript
JS中将多个逗号替换为一个逗号的实现代码
2017/06/23 Javascript
详解vue 模拟后台数据(加载本地json文件)调试
2017/08/25 Javascript
js + css实现标签内容切换功能(实例讲解)
2017/10/09 Javascript
微信小程序中进行地图导航功能的实现方法
2018/06/29 Javascript
ant-design-vue 快速避坑指南(推荐)
2020/01/21 Javascript
[01:07:57]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第二场 1月19日
2021/03/11 DOTA
Python利用pyHook实现监听用户鼠标与键盘事件
2014/08/21 Python
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)
2019/08/06 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
PyQt5中多线程模块QThread使用方法的实现
2020/01/31 Python
Python如何省略括号方法详解
2020/03/21 Python
美国批发零售网站:GearXS
2016/07/26 全球购物
超市实习总结自我鉴定
2013/09/19 职场文书
市场营销专业个人自荐信格式
2013/09/21 职场文书
数学国培研修感言
2014/02/13 职场文书
《晚上的太阳》教学反思
2014/04/23 职场文书
政府信息公开实施方案
2014/05/09 职场文书
2014年医院科室工作总结
2014/12/20 职场文书
Mac环境Nginx配置和访问本地静态资源的实现
2021/03/31 Servers
Java使用httpRequest+Jsoup爬取红蓝球号码
2021/07/02 Java/Android