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 13 Python
Python使用py2exe打包程序介绍
Nov 20 Python
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
Mar 05 Python
python 全局变量的import机制介绍
Sep 07 Python
Python中的Django基本命令实例详解
Jul 15 Python
Python使用一行代码获取上个月是几月
Aug 30 Python
树莓派使用USB摄像头和motion实现监控
Jun 22 Python
python实现图片九宫格分割
Mar 07 Python
Python对接六大主流数据库(只需三步)
Jul 31 Python
python Django的web开发实例(入门)
Jul 31 Python
python 使用事件对象asyncio.Event来同步协程的操作
May 04 Python
Python游戏开发实例之graphics实现AI五子棋
Nov 01 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
SSI指令
2006/11/25 PHP
php数组一对一替换实现代码
2012/08/31 PHP
基于php实现长连接的方法与注意事项的问题
2013/05/10 PHP
php实现通用的从数据库表读取数据到数组的函数实例
2015/03/21 PHP
PHP可变变量学习小结
2015/11/29 PHP
详解PHP使用Redis存储session时的一个Warning定位
2017/07/05 PHP
Add a Formatted Table to a Word Document
2007/06/15 Javascript
jquery 插件学习(四)
2012/08/06 Javascript
javascript调试过程中找不到哪里出错的可能原因
2013/12/16 Javascript
js 判断js函数、变量是否存在的简单示例代码
2014/03/04 Javascript
Javascript实现简单的富文本编辑器附演示
2014/06/16 Javascript
Document.body.scrollTop的值总为零的快速解决办法
2016/06/09 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/25 Javascript
详解vue-router 2.0 常用基础知识点之router-link
2017/05/10 Javascript
JavaScript设计模式之代理模式详解
2017/06/09 Javascript
详解微信小程序中的页面代码中的模板的封装
2017/10/12 Javascript
vue中使用echarts制作圆环图的实例代码
2018/07/27 Javascript
JavaScript实现动态添加、移除元素或属性的方法分析
2019/01/03 Javascript
JavaScript canvas绘制折线图
2020/02/18 Javascript
从表单校验看JavaScript策略模式的使用详解
2020/10/17 Javascript
详解vue中在父组件点击按钮触发子组件的事件
2020/11/13 Javascript
Python求导数的方法
2015/05/09 Python
Python 机器学习库 NumPy入门教程
2018/04/19 Python
python使用response.read()接收json数据的实例
2018/12/19 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
2019/01/05 Python
python递归法解决棋盘分割问题
2019/07/17 Python
学习和使用python的13个理由
2019/07/30 Python
django models里数据表插入数据id自增操作
2020/07/15 Python
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
2021/03/14 PHP
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
小学生自我鉴定
2013/10/12 职场文书
学生会主席就职演讲稿
2014/01/14 职场文书
行政管理毕业生自荐信
2014/02/24 职场文书
二手房买卖协议书
2014/04/10 职场文书
专题组织生活会方案
2014/06/15 职场文书
呐喊读书笔记
2015/06/30 职场文书