参考资料
- pytorch 模型部分参数的加载
- Pytorch中,只导入部分模型参数的做法
- Correct way to freeze layers
- Pytorch自由载入部分模型参数并冻结
- pytorch冻结部分参数训练另一部分
- PyTorch更新部分网络,其他不更新
- Pytorch固定部分参数(只训练部分层)
加载部分参数
如果加载现有模型的所有参数,我们常使用的是代码如下:
torch.load(model.state_dict())
在训练过程中,我们常常会使用预训练模型,有时我们是在自己的模型中加入别人的某些模块,或者对别人的模型进行局部修改,这个时候再使用torch.load(model.state_dict())
,就会出现类似这些的错误:RuntimeError: Error(s) in loading state_dict for Net:Missing key(s) in state_dict:xxx
。出现这个错误就是某些参数缺失或者不匹配。
保持原来网络层的名称和结构不变
现有模型中引入的那部分网络结构的网络层的名称和结构保持不变,这时候加载参数的代码很简单。
# 加载引入的网络模型
model_path = "xxx"
checkpoint = torch.<