从深度学习的应用角度学习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
如果是验证/测试状态,则不应该修改模型参数。
学习链接:
https://github.com/datawhalechina/thorough-pytorch
推荐阅读
- pytorch|深入浅出Pytorch系列(4)(实战--FashionMNIST时装分类)
- Python|pytorch,yolov5模型经onnx到Android(三)
- pytorch|yolov5-gpu版本部署与测试中遇到的问题与解决
- 【YOLOv5】6.0环境搭建(不定时更新)
- 深入浅出pytorch(四)
- 网络|视觉注意力机制概述
- pytorch深度学习实战|Mask R-CNN详解(图文并茂)
- 笔记|tensorflow框架搭建问题解决
- 神经网络|[经典网络](Mask R-CNN 网络结构详解 : R-CNN, Fast R-CNN, Faster R-CNN, Mask R-CNN, FCN)