Pytorch加载模型时报错:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 875:

Pytorch加载模型时报错:UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xc3 in position 875: ordinal not in range(128)

问题原因:

Pytorch在加载模型时候,如果训练保存模型的python环境是2.7,然而在python3的环境中去load模型,就会出现上面的错误,

>>> import torch
>>> model = torch.load('../abcd.pth')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/zhangboshen/anaconda3/lib/python3.6/site-packages/torch/serialization.py", line 358, in load
    return _load(f, map_location, pickle_module)
  File "/home/zhangboshen/anaconda3/lib/python3.6/site-packages/torch/serialization.py", line 529, in _load
    result = unpickler.load()
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 875: ordinal not in range(128)

这个问题目前pytorch官方的API中貌似还无法解决,因为这是pickle在python2和3两种环境中保存文件的编码方式不一致导致的,然而 torch.load()方法并没有提供类似于data = pickle.load(f, encoding='latin1')这种可以设置encoding的方法。

所以,我的方法是conda create -n py27 python=2.7,也就创造一个新的python2的环境来load模型,当然了,pytorch也需要重新安装。。。

可能看起来有点笨重,但是it worked!

关于这个问题的一些讨论:
https://github.com/pytorch/pytorch/issues/5994
https://discuss.pytorch.org/t/error-while-loading-saved-model-post-update-of-pytorch/14369/5
https://github.com/pytorch/pytorch/commit/54d5c53826479142fcf1e4de3ad77f8e4b81c123

如果大家有更好的解决方法,也欢迎分享给我:)

BTW,创建新的python环境并且安装完pytorch后,import torch的时候我这里又出现了一个这样的错误:

>>> import torch
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/zhangboshen/anaconda3/envs/py27/lib/python2.7/site-packages/torch/__init__.py", line 84, in <module>
    from torch._C import *
ImportError: numpy.core.multiarray failed to import

解决方法是重新安装numpy:

pip install numpy
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值