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 字符串格式化代码
Mar 17 Python
Python实现全角半角转换的方法
Aug 18 Python
Python中的Matplotlib模块入门教程
Apr 15 Python
Python决策树和随机森林算法实例详解
Jan 30 Python
Django框架实现分页显示内容的方法详解
May 10 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
May 13 Python
100行Python代码实现每天不同时间段定时给女友发消息
Sep 27 Python
TensorFlow 显存使用机制详解
Feb 03 Python
利用PyTorch实现VGG16教程
Jun 24 Python
利用python调用摄像头的实例分析
Jun 07 Python
Python制作春联的示例代码
Jan 22 Python
Python实现对齐打印 format函数的用法
Apr 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
星际争霸教主Flash的ID由来:你永远不会知道他之前的ID是www!
2019/01/18 星际争霸
yii框架配置默认controller和action示例
2014/04/30 PHP
js封装的textarea操作方法集合(兼容很好)
2010/11/16 Javascript
Angular外部使用js调用Angular控制器中的函数方法或变量用法示例
2016/08/05 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
2016/09/21 Javascript
Angular ng-repeat遍历渲染完页面后执行其他操作详细介绍
2016/12/13 Javascript
jQuery层级选择器实例代码
2017/02/06 Javascript
ES6 javascript中class静态方法、属性与实例属性用法示例
2017/10/30 Javascript
jquery中done和then的区别(详解)
2017/12/19 jQuery
vue项目中添加单元测试的方法
2018/07/21 Javascript
[01:27]DOTA2电竞之夜 今夜共饮庆功酒
2014/08/02 DOTA
Python序列化基础知识(json/pickle)
2017/10/19 Python
简单实现python数独游戏
2018/03/30 Python
对Python中gensim库word2vec的使用详解
2018/05/08 Python
python 实现敏感词过滤的方法
2019/01/21 Python
python浪漫表白源码
2019/04/05 Python
Python中print函数简单使用总结
2019/08/05 Python
python3 使用Opencv打开USB摄像头,配置1080P分辨率的操作
2019/12/11 Python
Opencv python 图片生成视频的方法示例
2020/11/18 Python
python 实现Requests发送带cookies的请求
2021/02/08 Python
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
如何查找网页漏洞
2016/06/22 面试题
Java面试笔试题大全
2016/11/23 面试题
毕业生造价工程师求职信
2013/10/17 职场文书
汽车技术服务与营销专业推荐信
2013/11/29 职场文书
高一家长会邀请函
2014/01/12 职场文书
小学岗位竞聘方案
2014/01/22 职场文书
办公室秘书岗位职责范本
2014/02/11 职场文书
决心书标准格式
2014/03/11 职场文书
高中同学会活动方案
2014/08/14 职场文书
国家税务局干部作风整顿整改措施
2014/09/18 职场文书
2014年保卫工作总结
2014/12/05 职场文书
2014年体检中心工作总结
2014/12/23 职场文书
css3 实现文字闪烁效果的三种方式示例代码
2021/04/25 HTML / CSS
MySQL中B树索引和B+树索引的区别详解
2022/03/03 MySQL
新的CSS 伪类函数 :is() 和 :where()示例详解
2022/08/05 HTML / CSS