Pytorch学习(三):神经网络

以下内容为Pytorch官网教程的翻译简化和一些自己的总结:
神经网络模型的一般训练过程:

  • 定义网络模型
  • 在输入数据集上迭代
  • 通过模型处理输入数据
  • 计算损失函数
  • 将梯度传播回模型参数
  • 更新模型参数

使用torch.nn定义函数,一个torch.nn.Module对象包含网络层和forward(input)方法返回output。
定义模型:

import torch
import torch.nn as nn
import torch.nn.functional as F


class Net(nn.Module):  # 继承nn.Module

    def __init__(self):  # 定义网络层
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(1, 6, 5)  # 二维卷积层
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1 = nn.Linear(16 * 5 * 5, 120)  #  全连接层
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):  # 前向传播计算,将层连接起来构建模型
        x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
        x = F.max_pool2d(F.relu(self.conv2(x)), 2)
        x = torch.flatten(x, 1) # 特征图压缩成一维
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

net = Net()  # 创建模型实例
print(net)  # 模型可直接打印查看层构造
net.parameters()  #  查看模型可训练参数
out = net(input)  # 调用模型实例,传入输入数据,得到输出数据

值得注意的是,torch.nn只支持mini-batch训练方式,如果输入数据样本是单个的,需要使用input.unsqueeze(0)来添加一个假的批维度。

模型定义完成后,还需要定义优化器,并启动学习过程:

import torch.optim as optim

# 定义优化器,输入模型参数和学习率
optimizer = optim.SGD(net.parameters(), lr=0.01)

# 训练循环过程中
optimizer.zero_grad()             # 梯度缓存清零
output = net(input)               # 模型输出
loss = criterion(output, target)  # 计算损失函数
loss.backward()                   # 反向传播
optimizer.step()                  # 更新参数

接下来是一些常用函数的介绍,包括模型层,优化器,损失函数

模型层

卷积池化:

nn.Conv1d(in_channels, out_channels, kernel_size)  # 一维卷积层
nn.Conv2d(in_channels, out_channels, kernel_size)  # 二维卷积层
nn.MaxPool1d(kernel_size)                          # 一维最大池化层
nn.MaxUnpool1d(kernel_size)  # 逆最大池化层,不能还原的部分默认置零
nn.AvgPool1d(kernel_size)                          # 平均池化层

非线性层:

nn.ReLu
nn.Sigmoid
nn.Tanh
nn.Threshold
nn.Softmax
nn.MultiheadAttention

标准化层:

nn.BatchNorm1d()  # 一维批标准化
nn.LayerNorm()    # 层标准化

Transformer层:

nn.Transformer()              # Transformer模型
nn.TransformerEncoder()       # Transformer编码器
nn.TransformerEncoderLayer()  # Transformer编码层
优化器
# 如果要将模型通过.cuda()移至GPU,需要在构建优化器之前迁移
# 需要保证优化参数与优化器在相同的位置
optim.Adam
optim.Adagrad
optim.RMSprop
optim.SGD
损失函数
nn.L1loss()            # 绝对值损失
nn.MSEloss()           # 均方损失
nn.CrossEntropyLoss()  # 交叉熵损失
nn.SmoothL1loss()      # 平滑L1损失 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值