调错日记|apex安装、pytorch载入模型报错

apex安装问题

apex不能直接使用pip install来安装,用这种方式安装之后会报错。具体应该使用下面的方法:

git clone https://github.com/NVIDIA/apex
cd apex
python setup.py install

用这个方法的时候,需要提前安装git,下载 Git网址 :https://git-scm.com/download/win
没有什么特殊要求可以直接点击next,安装完成之后在系统变量里面添加git的path
环境变量的配置参考其他文章

到这里就解决了apex安装的问题。

pytorch载入模型报错

使用load_state_dict()载入模型时出现missing...... unexpected......错误,这个错误相当于说模型参数不匹配,pytorch中模型参数是使用orderDict保存的,可以先将模型中的key值输出,观察两个之间的区别。

params = model.state_dict()  #获得模型的原始状态以及参数。
for k, vin params.items():
    print(k)

state_dict = torch.load(opt.model_path)
for k, vin state_dict.items():
    print(k)

部分情况是仅仅只是key值多了或者少了,减去或者加上即可。我这里举个少了resnet.的例子,遇到这种情况,这样处理即可:

state_dict = torch.load(opt.model_path)
new_state_dict = OrderedDict()
for k, vin state_dict.items():
    name ='resnet.' + k
    new_state_dict[name] = v

model.load_state_dict(new_state_dict, strict=False)

在这里load_state_dict()函数里指定了strict=False,这个参数可以在将原本训练好的模型迁移到新模型上,实际上它是直接忽略那些没有的dict,有相同的就复制,没有就直接放弃赋值,即忽略报错。

然而在我调了这么多之后,发现载入的模型根本就是错的,所以才会匹配不上。最终是在github上找到了pre-trained model。这里有点坑,按作者在github上的说明一步一步看下来,有一句After download pre-trained model and datasets,因为这个after,直接就没有往后面看而是往这一句话的前面找pre-trained model。万万没想到作者放在了后面。

你可能感兴趣的:(调错日记|apex安装、pytorch载入模型报错)