5.模型定义方式

5.1模型定义方式

Sequential,ModuleList、ModuleDict

5.1.1 Sequential

nn.Sequential()

​ 1.直接排列 2.OrderedDict

​ ps:Sequential定义的模型不需要再写forward

5.1.2 ModuleList

​ ModuleList 接收一个子模块作为输入,可以进行list操作。子模块或层的权重也会自动添加到网络中。

​ ModuleList 没有定义网络,只是将不同的模块储存在一起。ModuleList中元素的先后顺序不代表其在网络中的真实位置顺序,需要经过forward函数指定各个层的先后顺序后才算完成了模型的定义。

5.1.3 ModuleDict

​ 与List相似,可以更好添加层名

5.1.4 三种方法的比较

​ Sequential可以快速验证结果,ModuleList和Dict在有重复层时方便

​ ResNet中后者比较方便

5.2 快速搭建网络

5.2.1U-Net

组成U-Net的模型块主要有如下几个部分:

1)每个子块内部的两次卷积(Double Convolution)

2)左侧模型块之间的下采样连接,即最大池化(Max pooling)

3)右侧模型块之间的上采样连接(Up sampling)

4)输出层的处理

除模型块外,还有模型块之间的横向连接,输入和U-Net底部的连接等计算,这些单独的操作可以通过forward函数来实现。

5.3 PyTorch修改模型

修改模型层、添加外部输出、添加额外输出

5.4 PyTorch模型保存与读取

5.4.1 存储格式

​ PyTorch存储模型主要采用pkl,pt,pth三种格式

5.4.2 存储内容

​ 结构和权重

​ torch.sava(model,Save_dir)保存整个

​ torch.sava(model.state_dict ,Save_dir)保存权重

5.4.3 单卡和多卡模型存储区别

​ 两种方式 .cuda() 和 .to(device)

​ 多卡训练的话,需要对模型使用torch.nn.DataParallel

5.4.4 情况分类讨论

​ 单卡保存+单卡加载

​ 单卡保存+多卡加载

​ 多卡保存+单卡加载

​ 多卡保存+多卡保存

posted @ 2022-03-16 18:48  hn_wang  阅读(83)  评论(0)    收藏  举报