最近在学习别人代码的时候发现环境要求python2.7,但是又懒得搭建anaconda虚拟环境,因此在python3,pytorch 0.4下进行了测试,遇到了一下问题
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)
查阅相关资料后,主要是由于python2和python3的默认编码方式不同,python3中默认采用ascii码的形式,因此只需要把与巡立马模型文件加载时利用python2的方式解码即可。。试了很多方法,最终以下测试通过
from functools import partial
import pickle
pickle.load = partial(pickle.load, encoding="latin1")
pickle.Unpickler = partial(pickle.Unpickler, encoding="latin1")
checkpoint = torch.load(args.resume, map_location=lambda storage, loc: storage, pickle_module=pickle)
即可加载,最后训练之后只需要在python3下再次保存,之后就不会出现编码错误了