PyTorch神经网络搭建入门
这里演示了使用Pytorch
搭建神经网络的基本方法,需要说明的是,本文中作为示例的数学函数估算其实并不适合神经网络方法,建议使用 statsmodels
或skleran
。
技术路线
不管多复杂的神经网络,都需要以下步骤进行网络定义和参数优化:
- 定义网络:定义网络结构,通过继承
torch.nn.Module
类实现,包括两部分,即各网络层的声明,和信息在网络层之间的传递关系;
class Net(torch.nn.Module):def __init__(self):super(Net,self).__init__()#使用父类的构造方法'''这里添加神经网络的层级结构'''def forward(self,x):'''这里编写数据在各层级中的传递方法'''return y
定义优化器,选择库中的经典优化器,或者自行设计优化器,优化器参数一般为网络结构和单次训练的学习率,如
optimizer=torch.optim.SGD(net.parameters(),lr=0.5)
;定义损失函数,损失函数即计算预测结果与实际结果的差异,可以使用库中提供的方法,如
loss_f=torch.nn.MSELoss()
;在定义完之后,开始一次一次的循环,对神经网络的参数(在PyTorch中是隐藏的)进行优化:
①先清空优化器里的梯度信息,optimizer.zero_grad();
②再将input传入,output=net(input) ,正向传播
③计算损失,loss=compute_loss(target,output) ,计算模型输出与真实值的误差;
④误差反向传播,loss.backward(),将误差传递回神经网络的各层;
⑤更新参数,optimizer.step(),更新神经网络参数。
安装
打开Pytorch
官方网站,https://pytorch.org/get-started/locally/,选择版本、系统、安装方式、语言平台、CPU和GPU配置(装有英伟达显卡的电脑可以选择“CUDA”,否则选择“CPU”),然后将下方生成的代码复制到命令行。
引入模块
引入搭建神经网络的必备模块
import torch as t
from torch import nn
import torch.nn.functional as F
from torch.autograd import Variable as V
生成数据
使用Python自带功能,生成一组模拟数据
from random import random#生成范围在(0,1)随机数x=[random() for i in range(100)]#生成100个随机自变量
y=[xx**2+0.2*random()-0.2*random() for xx in x]
#生成相应的因变量,并添加随机误差
查看生成的数据图像
import matplotlib.pyplot as plt#用于显示图像
plt.scatter(x,y)
plt.show()
将列表(list)格式的数据转换为PyTorch
张量(tensor),修改数据形状成为100×1的二维张量,再转换为变量(Variable )
x,y=t.tensor(x),t.tensor(y)#转换为tensor
x=x.view(-1,1)#修改张量形状,-1代表自动设定长度
y=y.view(-1,1)
x,y=V(x),V(y)
定义网络结构
网络结构对象通过继承torch.nn.Module
来实现,对象中必须定义__init__()
和forward()
函数。
其中__init__()
中定义了神经网络的结构,forward()
定义了数据在神经网络中传递方式,调用模型即调用forward()
。
class Net(nn.Module):def __init__(self,n_feature,n_hidden,n_output):super(Net,self).__init__()#使用父类的构造方法self.hidden=nn.Linear(n_feature,n_hidden)#定义一个隐藏层self.predict=nn.Linear(n_hidden,n_output)#定义一个输出层def forward(self,x):x=F.relu(self.hidden(x))x=self.predict(x)return xnet=Net(1,10,1)#实例化对象
print(net)#查看网络结构
'''
输出为:
Net((hidden): Linear(in_features=1, out_features=10, bias=True)(predict): Linear(in_features=10, out_features=1, bias=True)
)
'''
选择优化器和损失函数
根据具体情况选择PyTorch
中提供优化器和损失函数,这里仅作为示例。
opt=t.optim.SGD(net.parameters(),lr=0.5)#第一个参数为模型信息,第二个参数为学习率
loss_f=nn.MSELoss()
模型训练
通过反复训练,进行模型优化
for epoch in range(100):pre=net(x)#使用模型进行预测loss=loss_f(pre,y)#比较预测结果和真实值,计算损失值opt.zero_grad()#每次计算梯度前将梯度清零loss.backward()#损失值沿模型反向传递opt.step()#使用优化器更新模型print(epoch,loss)#查看损失
模型应用
使用模型进行预测
z=t.tensor([[0.5]])#定义一个张量
net(z)#预测结果
'''
输出:
tensor([[0.2511]])
'''
保存模型
将模型保存为文件,以便进行其他操作
t.save(net, 'net.pkl')#保存模型,参数为模型对象和文件名
net2 = t.load('net.pkl')#从已保存的模型文件加载
全部代码
import torch as t
from torch import nn
import torch.nn.functional as F
from torch.autograd import Variable as V
import matplotlib.pyplot as plt
from random import random#生成数据
x=[random() for i in range(100)]
y=[xx**2+0.2*random()-0.2*random() for xx in x]
plt.scatter(x,y)
plt.show()#数据转化为Pytorch变量
x,y=t.tensor(x),t.tensor(y)
x=x.view(-1,1)
y=y.view(-1,1)
x,y=V(x),V(y)#定义神经网络
class Net(nn.Module):def __init__(self,n_feature,n_hidden,n_output):super(Net,self).__init__()self.hidden=nn.Linear(n_feature,n_hidden)self.predict=nn.Linear(n_hidden,n_output)def forward(self,x):x=F.relu(self.hidden(x))x=self.predict(x)return xnet=Net(1,10,1)
print(net)#选择优化器
opt=t.optim.SGD(net.parameters(),lr=0.5)
loss_f=nn.MSELoss()#训练模型
for epoch in range(100):pre=net(x)loss=loss_f(pre,y)opt.zero_grad()loss.backward()opt.step()print(epoch,loss)#模型应用
z=t.tensor([[0.5]])
net(z)#保存和读取模型
t.save(net, 'net.pkl')
net2 = t.load('net.pkl')
PyTorch神经网络搭建入门相关推荐
- 【PyTorch】PyTorch神经网络实战入门
Google Colab 我们使用由谷歌提供的Colab免费服务,在谷歌的服务器上运行代码.登录谷歌账号之后,通过访问 https://colab.research.google.com 来激活谷歌C ...
- 【PyTorch】1入门——Tensor、自动微分、神经网络、PyTorch 图像分类
PyTorch60min入门教程 1. PyTorch简介 2. 快速入门 2.1 安装与配置 2.2 PyTorch入门第一步 2.2.1 Tensor 2.2.2 自动微分 2.2.3 神经网络 ...
- pytorch深度学习入门笔记
Pytorch 深度学习入门笔记 作者:梅如你 学习来源: 公众号: 阿力阿哩哩.土堆碎念 B站视频:https://www.bilibili.com/video/BV1hE411t7RN? 中国大学 ...
- pytorch学习-从入门到mnist(一)
pytorch学习-从入门到mnist(一) 标签: pytorch 在学习过Tensorflow之后,其实学习pytorch并不是特别难,因为很多地方是相通的,可能每个库会有自己的深层特性,但是在初 ...
- Pytorch纯新手入门笔记
Pytorch入门笔记(推荐配合B站up主我是土堆食用) PyTorch深度学习快速入门教程(绝对通俗易懂!)[小土堆] 视频作者:我是土堆 Pytorch入门 P1 命令行中对anaconda不同环 ...
- PyTorch机器学习从入门到实战
人工智能入门实践, 轻松玩转PyTorch框架. 校宝在线出品的书籍<PyTorch机器学习从入门到实战>发售了! 购书链接: 内容简介 近年来,基于深度学习的人工智能掀起了一股学习的热潮 ...
- PyTorch官方教程中文版:PYTORCH之60MIN入门教程代码学习
Pytorch入门 import torch""" 构建非初始化的矩阵 """x = torch.empty(5,3) #print(x)& ...
- 【Pytorch神经网络实战案例】21 基于Cora数据集实现Multi_Sample Dropout图卷积网络模型的论文分类
Multi-sample Dropout是Dropout的一个变种方法,该方法比普通Dropout的泛化能力更好,同时又可以缩短模型的训练时间.XMuli-sampleDropout还可以降低训练集和 ...
- 总结 | 深度学习PyTorch神经网络箱使用
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 计算机视觉联盟笔记 作者:王博Kings.Sophia 本文内容概述PyTorch神经网络箱 AI博士笔记系 ...
- 神经网络模型中class的forward函数何时调用_总结深度学习PyTorch神经网络箱使用...
↑ 点击蓝字 关注极市平台来源丨计算机视觉联盟编辑丨极市平台 极市导读 本文介绍了Pytorch神经网络箱的使用,包括核心组件.神经网络实例.构建方法.优化器比较等内容,非常全面.>>加入 ...
最新文章
- prometheus job 重复_分享一款开源的监控神器--Prometheus 简介、架构及相关概念
- Javascript-7对象:字符串、时间
- contos6.5卸载php7,centos8 测地卸载php5.6 与卸载php7
- CentOS 7.2.1511 x64下载地址
- python产生随机字符串_Python生成随机字符串
- mysql主从复制原理分析
- JQuery选择器跨frame和层次选择
- 为啥有人说每个程序员都应该这学习5种编程语言?
- 电教室软件 linux,在深度操作系统上安装多媒体电子教室Veyon
- JS验证身份证、营业执照、组织机构代码等
- 计算机几何 - 如何判断一个多边形是凸多边形还是凹多边形
- [TimLinux] Python3 Coverity zeep/SOAP 库使用示例
- 分类流控qdisc之htb
- a轮b轮c轮天使轮区别是什么?
- 可以DIY装修的商城系统,你也能拥有
- 小米 微信:无法连接服务器,微信出现大规模故障 多地无法登录
- Zabbix监控网络设备模板配置
- 在cmd下import cv2报错——OpenCV实现BRISK
- pta 7-34 a+aa+aaa+.. (10 分)
- 第十三届蓝桥杯模拟赛(第一期)题解
热门文章
- 计算机的分类按cpu芯片可以分为,按CPU芯片可分为单片机、单板机、多芯片机和多板机...
- python开发是不是苦累_程序员又苦又累,程序员教师可能成为未来最理想职业!...
- linux下 udf提权_raven靶机实战(linux-udf提权)-vuluhub系列(四)
- windows应用x64和x86运行效率_现在你可以在 Windows 中运行 Linux 应用了 | Linux 中国...
- Javascript特效:输入框焦点判断
- Openlayer:学习笔记之图标与提示信息
- Oracle 11g ora 15018,OracleASM错误之--ORA-15031、ORA-15014
- 编程中常见的安全算法
- 图像处理_OpenCV图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)
- 笔记_深度学习相关_PyTorch