pytorch|深入浅出Pytorch系列(3)(主要组成模块)

从深度学习的应用角度学习Pytorch:
1. 数据读入: PyTorch数据读入是通过Dataset+Dataloader的方式完成的,Dataset定义好数据的格式和数据变换形式,Dataloader用iterative的方式不断读入批次数据。
2. 模型搭建: 【pytorch|深入浅出Pytorch系列(3)(主要组成模块)】以LeNet为例(手写数字辨识)进行说明:
LeNet分为卷积层块和全连接层块两个部分。
卷积层块里的基本单位是卷积层后接最大池化层:卷积层用来识别图像里的空间模式,如线条和物体局部,之后的最大池化层则用来降低卷积层对位置的敏感性。卷积层块由两个这样的基本单位重复堆叠构成。卷积层块的输出形状为(批量大小, 通道, 高, 宽)。
全连接层:当卷积层块的输出传入全连接层块时,全连接层块会将小批量中每个样本变平(flatten)。也就是说,全连接层的输入形状将变成二维,其中第一维是小批量中的样本,第二维是每个样本变平后的向量表示,且向量长度为通道、高和宽的乘积。全连接层块含3个全连接层。它们的输出个数分别是120、84和10,其中10为输出的类别个数。
3. 定义损失函数 PyTorch中常用的损失函数(一般通过torch.nn调用),一般包括:
(1)二分类交叉熵损失函数

torch.nn.BCELoss(weight=None, size_average=None, reduce=None, reduction='mean')

(2)交叉熵损失函数
torch.nn.CrossEntropyLoss(weight=None, size_average=None, ignore_index=-100, reduce=None, reduction='mean')

(3)L1损失函数
torch.nn.L1Loss(size_average=None, reduce=None, reduction='mean')
(4)MSE损失函数
torch.nn.MSELoss(size_average=None, reduce=None, reduction='mean')
(5)平滑L1 (Smooth L1)损失函数
torch.nn.SmoothL1Loss(size_average=None, reduce=None, reduction='mean', beta=1.0)
(6)MarginRankingLoss
torch.nn.MarginRankingLoss(margin=0.0, size_average=None, reduce=None, reduction='mean')
(7)余弦相似度
torch.nn.CosineEmbeddingLoss(margin=0.0, size_average=None, reduce=None, reduction='mean')
还有一些重要的损失函数,这里没有详细列出。
4. 定义优化器 Pytorch很人性化的给我们提供了一个优化器的库torch.optim,下面提供了十种优化器。
  • torch.optim.ASGD
  • torch.optim.Adadelta
  • torch.optim.Adagrad
  • torch.optim.Adam
  • torch.optim.AdamW
  • torch.optim.Adamax
  • torch.optim.LBFGS
  • torch.optim.RMSprop
  • torch.optim.Rprop
  • torch.optim.SGD
  • torch.optim.SparseAdam
5. 模型训练和评估 如果是训练状态,那么模型的参数应该支持反向传播的修改;
如果是验证/测试状态,则不应该修改模型参数。


学习链接:
https://github.com/datawhalechina/thorough-pytorch

    推荐阅读