原因
多卡训练;单卡模糊加载进行测试。
训练时,通过torch.nn.DataParallel(self.model)进行多卡并行训练;测试时,用单卡模糊加载保存的模型权重,很多模型参数都没有加载成功,自然会导致测试效果很差。
解决方法
测试时,使用多卡加载模型时,删掉'module.'前缀;或者用单卡加载模型进行测试。
# 删掉'module.'前缀
loaded_dict = torch.load(weight_c1)
new_state_dict = OrderedDict()
for k, v in loaded_dict.items():
name = k[7:] # module字段在最前面,从第7个字符开始就可以去掉module
new_state_dict[name] = v #新字典的key值对应的value一一对应
model_cascade1.load_state_dict(new_state_dict, strict=True)
解决效果
改动前:
改动后:
收获
我之前一直以为strict=Fasle对模型效果影响不大,这次总算知道影响有多大了。
标签:load,模型,state,dict,model,加载 From: https://www.cnblogs.com/curie/p/17631948.html