我正在尝试将权重从一个预先训练的模型逐层复制到另一个结构完全相似的模型中。原始模型在二值图像分类问题上的准确率为94%,但目标模型无法预测,导致整个测试集仅预测一个类别。
例如,我使用这段代码手动将权重从预训练模型的词干复制到目标的词干:
modelmix.stem[0].weight = modelSep.stem[0].weight
modelmix.stem[1].weight = modelSep.stem[1].weight
modelmix.stem[1].bias = modelSep.stem[1].bias
其中modelmix是目标,modelSep是预训练模型。对所有其他层使用了类似的代码片段。目标模型无法工作,即使我可以看到所有层的权重都是相似的。我使用的是pytorch 1.1。谢谢
发布于 2020-06-23 15:54:44
您可以创建参数名称相同的另一个模型,例如:
import torch.nn as nn
model1 = nn.Sequential()
model1.add_module('layer1', nn.Linear(10, 20))
model1.add_module('layer2', nn.Linear(20, 10))
model2 = nn.Sequential()
model2.add_module('layer1', nn.Linear(10, 20))
model2.add_module('layer2', nn.Linear(20, 10))
model2.add_module('layer3', nn.Linear(10, 5))
然后,您可以将model1 state_dict加载到model2,反之亦然。
model2.load_state_dict(model1.state_dict(), strict=False)
如果你想要更定制的东西,你应该照你说的去做。
https://stackoverflow.com/questions/62529729
复制相似问题