pytorch加载model发现key的值有差异,能不能修改

用pytorch加载别人训练的模型时候,
RuntimeError: Error(s) in loading state_dict for PSMNet:
Missing key(s) in state_dict: "feature_extraction.firstconv.0.0.weight", "feature_extraction.firstconv.0.1.weight",。。。。。

Unexpected key(s) in state_dict: "module.feature_extraction.firstconv.0.0.weight", "module.feature_extraction.firstconv.0.1.weight",
图片说明

发现每个在模型里的参数都多个了module.
保存的格式是

 torch.save({
            'epoch': epoch,
            'state_dict': model.state_dict(),
            'train_loss': total_train_loss / len(TrainImgLoader),
        }, savefilename)

读取的代码是

 state_dict = torch.load(basic.loadmodel)
 model.load_state_dict(state_dict['state_dict'])

请问能不能做到将模型的key值从
module.feature_extraction.firstconv.0.1.weight

修改到
feature_extraction.firstconv.0.1.weight

qq_41544501
lyf_ 回复是否龙磊磊真的一无所有: 是的,就是这么做的
一年多之前 回复
qq_32998593
是否龙磊磊真的一无所有 或者,将模型加载后,用模型model = nn.DataParallel(model),然后model.load_state_dict(checkpoint)
一年多之前 回复
qq_32998593
是否龙磊磊真的一无所有 或者,将模型加载后,用模型model = nn.
一年多之前 回复
qq_32998593
是否龙磊磊真的一无所有 这个问题很简单,第一,用一个字典,将key值的module去掉,k.replace('module.','')。或者取得key值的第[7:]到最后。表面去掉"module.".
一年多之前 回复

1个回答

解决了 , torchload返回的是字典,搞一个新字典,然后把key用‘.’分段后重新组装一个字典就可以读了

xulili0518
xulili0518 请问一下如何创建字典?我这边创建完成后说我没有键值
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐