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 情况分类讨论
单卡保存+单卡加载
单卡保存+多卡加载
多卡保存+单卡加载
多卡保存+多卡保存

浙公网安备 33010602011771号