【问题标题】:load and freeze one model and train others in PyTorch在 PyTorch 中加载和冻结一个模型并训练其他模型
【发布时间】:2020-11-09 21:54:14
【问题描述】:
我有一个模型 A,它包括三个子模型 model1、model2、model3。
模型流程:model1 --> model2 --> model3
我在一个独立项目中训练了 model1。
问题是在训练模型A时如何使用预训练好的model1?
现在,我尝试如下实现:
我通过`model1.load_state_dict(torch.load(model1.pth))加载model1的checkpoint,然后设置model1参数的requires_grad为False?
对吗?
【问题讨论】:
标签:
python
tensorflow
pytorch
torchvision
【解决方案1】:
是的,没错。
当您按照您解释的方式构建模型时,您所做的就是正确的。
ModelA 包含三个子模型 - model1、models、model3
然后您使用model*.load_state_dict(torch.load(model*.pth)) 加载每个模型的权重
然后为您要冻结的模型制作requires_grad=False。
for param in model*.parameters():
param.requires_grad = False
您还可以通过访问子模块来冻结特定层的权重,例如,如果您在模型 1 中有一个名为 fc 的层,那么您可以通过设置 model1.fc.weight.requres_grad = False 来冻结其权重。