Python3中将cPickle改成了pickle.
当在Python3中尝试使用pickle导入cPickle产生的文件:
import pickle
import gzip
import numpy
with gzip.open('mnist.pkl.gz', 'rb') as f:
l = list(pickle.load(f))
print(l)
可能会产生以下错误:
Traceback (most recent call last):
File "mnist.py", line 7, in <module>
train_set, valid_set, test_set = pickle.load(f)
UnicodeDecodeError: 'ascii' codec can't decode byte 0x90 in position 614: ordinal not in range(128)
解决方案如下:
方法1:
import pickle
import gzip
import numpy
with open('mnist.pkl', 'rb') as f:
u = pickle._Unpickler(f)
u.encoding = 'latin1'
p = u.load()
print(p)
方法2:
pickle.load(file, encoding='latin1')
其实这个Bug引入的原因,还是Python3和Python2之间的编码问题导致的。
参考链接:
1.Pickle incompatibility of numpy arrays between Python 2 and 3