场景
定义两个框架一样的模型,并用两个不同的预训练的权重文件赋权,存在模型参数被覆盖的问题
具体情况
以TextCNN框架为案例
# 定义两个模型实例
targetModel = TextCNN(word_dim, vocab,label_num, kernel_sizes, num_channels, dropout=0.1)
defendModel = TextCNN(word_dim, vocab,label_num, kernel_sizes, num_channels, dropout=0.1)
# 分别赋权
targetModel_weight = torch.load(target_model_path)
targetModel.load_state_dict(targetModel_weight['model_state_dict'])
targetModel.to(device)
targetModel.eval()
# 此时打印第一个模型的第一个参数权重
for name, param in targetModel.named_parameters():
print(f"{name}: {param}")
break
defendModel_weight = torch.load(pretrained_model_path)
defendModel.load_state_dict(defendModel_weight['model_state_dict'])
defendModel.to(device)
defendModel.eval()
# 打印两个模型的第一个参数权重
for name, param in targetModel.named_parameters():
print(f"{name}: {param}")
break
for name, param in defendModel.named_parameters():
print(f"{name}: {param}")
break
可以看到前面定义的模型参数,完全被后面的模型给覆盖了。不知道怎么解决这个问题,挺神奇的~~