用pytorh建立神经网络的一般流程总结

最近根据网上的视频或者书籍写了一些神经网络练手,想对基本流程做一个总结。首先是自己的简介版本。
先class net(nn.Module)定义网络

再net实例化

再epoch训练

再net.eval()测试

以下部分为网上参考,感觉写的很全面。
作者:小新_XX
链接:https://www.jianshu.com/p/51d8b353b435
来源:简书
3. PyTorch基础概念
3.1 PyTorch的基本背景
PyTorch是一个建立在Torch基础上的包,它主要提供两个高级功能:
(1)类似numpy的抽象方法来表征的张量(tensor)运算,并且可以使用GPU加速。
(2)包含自动求导系统的深度神经网络

3.2 PyTorch的基本元素
(1)张量(Tensor)
张量是PyTorch中最基本的元素,相当于numpy.ndarray. 两者的运算方式也如出一辙,在PyTorch中也可以相互转化。

(2)变量(Variable)
Tensor是PyTorch中对numpy.ndarray的完美替代品,但搭建神经网络时,还需要variable来构建计算图。Variable是对tensor的封装,是一个存放会变化的值的地理位置,这个值就是tensor。每个variable有3个属性:
variable.data: variable中tensor的值;
variable.grad:variable中tensor的梯度;
variable.gradfn:指向Function对象,用于反向传播的梯度计算之用。
(3)神经网络模块(nn.Module)
nn是PyTorch中专门为神经网络设计的借口。nn.Module是nn中一个重要的类,的含各种网络层的定义以及前向传播(forward pass)的方法。在定义自己的神经网络时,需要继承nn.Module类,并实现自己的forward方法

  1. 通用代码实现流程
    以PyTorch为例,一个常规的深度学习代码开发流程如下:

4.1 安装并导入相关的深度学习库

import torch   
from torch.autograd import variable
import torch.nn

4.2 数据获取和预处理
准备好需要使用的训练数据和测试数据,并进行相应的预处理,如归一化,零均值,图片剪切,翻转等等

import torch.data.Dataloader as Dataloader 
import torchvision

torch.data.Dataloader是PyTorch中读取数据的重要接口,将数据接口的输入按照batch size封装成Tensor,后续再包装成variable即可作为网络的输入,起到数据和模型输入间承上启下的作用。
torchvision是独立于PyTorch的关于图像操作的库,包括常用数据集的下载,常用的神经网络模型(如AlexNet, VGG, ResNet等),基本的图形操作(随机切割,旋转等)。

4.3 定义神经网络
神经网络的定义需要继承torch.nn.Module类,包括初始化__init__(self)和自定义的前向传播层forward(self, x)
(1)init(self):放置有可学习参数的层,如卷积层,全连接层等
(2)forward(self, x):输入x,按照前向传播算法,使用卷积等操作来得到神经网络最终的输出。

class Net(torch.nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.hidden = torch.nn.Linear(1, 20)   # 隐藏层
        self.predict = torch.nn.Linear(20, 1)   # 输出层

    def forward(self, x):
        x = F.relu(self.hidden(x))      # 隐藏层的激活函数
        x = self.predict(x)             # 线性输出层
        return x
net = Net(n_feature=2, n_hidden=10, n_output=2)

4.4 定义损失函数(loss function)和优化器(optimizer)
损失函数用来衡量网络预测的输出和实际标签值之间的差距。通过反向传播的计算,通过优化器提供的方式来调整神经网络的参数。

loss_func = torch.nn.CrossEntropyLoss() #损失函数
optimizer = torch.optim.SGD(net.parameters(), lr=0.02) #优化器

4.5 训练网络
训练网络的目的是通过最小化误差的方法来调整网络的参数,使得网络可以对输入数据进行准确的预测。包括如下的步骤:
(1)获取训练数据和标签:
(2)前向传播
(3)计算损失函数
(4)清零优化器
(5)反向传播并更新参数

torch_dataset = Data.TensorDataset(X, Y) # (1) 获取训练数据
loader = Data.DataLoader(dataset=torch_dataset, \
batch_size=BATCH_SIZE, shuffle=True, num_workers=2,) # (1) 封装数据
for t in range(100):
    out = net(x)     # (2) 前向传播
    loss = loss_func(out, y)     # (3) 计算损失函数
    optimizer.zero_grad()   # (4) 清空优化器
    loss.backward()         # (5) 误差反向传播, 计算参数更新值
    optimizer.step()        # (5) 更新网络参数

4.5 测试网络
将测试数据输入网络的到相应的预测输出,和真实输出作比较,并评估预测效果。

prediction = net(x_test)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值