这里演示了使用Pytorch搭建神经网络的基本方法,需要说明的是,本文中作为示例的数学函数估算其实并不适合神经网络方法,建议使用 statsmodelsskleran

技术路线

不管多复杂的神经网络,都需要以下步骤进行网络定义和参数优化:

  1. 定义网络:定义网络结构,通过继承torch.nn.Module类实现,包括两部分,即各网络层的声明,和信息在网络层之间的传递关系;
class Net(torch.nn.Module):def __init__(self):super(Net,self).__init__()#使用父类的构造方法'''这里添加神经网络的层级结构'''def forward(self,x):'''这里编写数据在各层级中的传递方法'''return y
  1. 定义优化器,选择库中的经典优化器,或者自行设计优化器,优化器参数一般为网络结构和单次训练的学习率,如optimizer=torch.optim.SGD(net.parameters(),lr=0.5)

  2. 定义损失函数,损失函数即计算预测结果与实际结果的差异,可以使用库中提供的方法,如loss_f=torch.nn.MSELoss()

  3. 在定义完之后,开始一次一次的循环,对神经网络的参数(在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神经网络搭建入门相关推荐

  1. 【PyTorch】PyTorch神经网络实战入门

    Google Colab 我们使用由谷歌提供的Colab免费服务,在谷歌的服务器上运行代码.登录谷歌账号之后,通过访问 https://colab.research.google.com 来激活谷歌C ...

  2. 【PyTorch】1入门——Tensor、自动微分、神经网络、PyTorch 图像分类

    PyTorch60min入门教程 1. PyTorch简介 2. 快速入门 2.1 安装与配置 2.2 PyTorch入门第一步 2.2.1 Tensor 2.2.2 自动微分 2.2.3 神经网络 ...

  3. pytorch深度学习入门笔记

    Pytorch 深度学习入门笔记 作者:梅如你 学习来源: 公众号: 阿力阿哩哩.土堆碎念 B站视频:https://www.bilibili.com/video/BV1hE411t7RN? 中国大学 ...

  4. pytorch学习-从入门到mnist(一)

    pytorch学习-从入门到mnist(一) 标签: pytorch 在学习过Tensorflow之后,其实学习pytorch并不是特别难,因为很多地方是相通的,可能每个库会有自己的深层特性,但是在初 ...

  5. Pytorch纯新手入门笔记

    Pytorch入门笔记(推荐配合B站up主我是土堆食用) PyTorch深度学习快速入门教程(绝对通俗易懂!)[小土堆] 视频作者:我是土堆 Pytorch入门 P1 命令行中对anaconda不同环 ...

  6. PyTorch机器学习从入门到实战

    人工智能入门实践, 轻松玩转PyTorch框架. 校宝在线出品的书籍<PyTorch机器学习从入门到实战>发售了! 购书链接: 内容简介 近年来,基于深度学习的人工智能掀起了一股学习的热潮 ...

  7. PyTorch官方教程中文版:PYTORCH之60MIN入门教程代码学习

    Pytorch入门 import torch""" 构建非初始化的矩阵 """x = torch.empty(5,3) #print(x)& ...

  8. 【Pytorch神经网络实战案例】21 基于Cora数据集实现Multi_Sample Dropout图卷积网络模型的论文分类

    Multi-sample Dropout是Dropout的一个变种方法,该方法比普通Dropout的泛化能力更好,同时又可以缩短模型的训练时间.XMuli-sampleDropout还可以降低训练集和 ...

  9. 总结 | 深度学习PyTorch神经网络箱使用

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散   计算机视觉联盟笔记   作者:王博Kings.Sophia 本文内容概述PyTorch神经网络箱 AI博士笔记系 ...

  10. 神经网络模型中class的forward函数何时调用_总结深度学习PyTorch神经网络箱使用...

    ↑ 点击蓝字 关注极市平台来源丨计算机视觉联盟编辑丨极市平台 极市导读 本文介绍了Pytorch神经网络箱的使用,包括核心组件.神经网络实例.构建方法.优化器比较等内容,非常全面.>>加入 ...

最新文章

  1. prometheus job 重复_分享一款开源的监控神器--Prometheus 简介、架构及相关概念
  2. Javascript-7对象:字符串、时间
  3. contos6.5卸载php7,centos8 测地卸载php5.6 与卸载php7
  4. CentOS 7.2.1511 x64下载地址
  5. python产生随机字符串_Python生成随机字符串
  6. mysql主从复制原理分析
  7. JQuery选择器跨frame和层次选择
  8. 为啥有人说每个程序员都应该这学习5种编程语言?
  9. 电教室软件 linux,在深度操作系统上安装多媒体电子教室Veyon
  10. JS验证身份证、营业执照、组织机构代码等
  11. 计算机几何 - 如何判断一个多边形是凸多边形还是凹多边形
  12. [TimLinux] Python3 Coverity zeep/SOAP 库使用示例
  13. 分类流控qdisc之htb
  14. a轮b轮c轮天使轮区别是什么?
  15. 可以DIY装修的商城系统,你也能拥有
  16. 小米 微信:无法连接服务器,微信出现大规模故障 多地无法登录
  17. Zabbix监控网络设备模板配置
  18. 在cmd下import cv2报错——OpenCV实现BRISK
  19. pta 7-34 a+aa+aaa+.. (10 分)
  20. 第十三届蓝桥杯模拟赛(第一期)题解

热门文章

  1. 计算机的分类按cpu芯片可以分为,按CPU芯片可分为单片机、单板机、多芯片机和多板机...
  2. python开发是不是苦累_程序员又苦又累,程序员教师可能成为未来最理想职业!...
  3. linux下 udf提权_raven靶机实战(linux-udf提权)-vuluhub系列(四)
  4. windows应用x64和x86运行效率_现在你可以在 Windows 中运行 Linux 应用了 | Linux 中国...
  5. Javascript特效:输入框焦点判断
  6. Openlayer:学习笔记之图标与提示信息
  7. Oracle 11g ora 15018,OracleASM错误之--ORA-15031、ORA-15014
  8. 编程中常见的安全算法
  9. 图像处理_OpenCV图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)
  10. 笔记_深度学习相关_PyTorch