【课程链接】
https://datawhalechina.github.io/thorough-pytorch/index.html
【B站视频】
https://www.bilibili.com/video/BV1L44y1472Z
这两天没有电脑用,先跟着学习进度听了课程,虽然对我来说有些难理解,逼自己跟着学,听不懂就重复听,抓住组队学习的机会多学一点赚一点,这样才能有进步💪
第五章
PyTorch中模型定义的三种方式比较:
Sequential适用于快速验证结果,因为已经明确了要用哪些层,直接写一下就好了,不需要同时写__init__和forward;缺点:需要逐层定义。
ModuleList和ModuleDict在某个完全相同的层需要重复出现多次时,非常方便实现,可以”一行顶多行“;可以实现复用。缺点:定义完不能直接使用,需要写一个forward。
当我们需要之前层的信息的时候,如 ResNets 中的残差计算,当前层的结果需要和之前层中的结果进行融合,一般使用ModuleList/ModuleDict 比较方便。
【将简单层构建成具有特定功能的模型块】
组成U-Net的模型块主要有如下几个部分:
1)每个子块内部的两次卷积(Double Convolution)
2)左侧模型块之间的下采样连接,即最大池化(Max pooling)
3)右侧模型块之间的上采样连接(Up sampling)
4)输出层的处理
通过模型块的方式实现了代码复用,整个模型结构定义所需的代码总行数明显减少,代码可读性也得到了提升。
【修改已有模型】
以pytorch官方视觉库torchvision预定义好的模型ResNet50为例
如何在已有模型的基础上:
修改模型若干层
添加额外输入
添加额外输出
PyTorch的模型的存储格式
PyTorch如何存储模型
单卡与多卡训练下模型的保存与加载方法