【发布时间】:2017-12-04 07:26:09
【问题描述】:
我正在使用 mnist 数据的练习代码在 Python 3.4
中进行深度学习原代码是
import _pickle as cPickle
def load_data():
f = gzip.open('../data/mnist.pkl.gz', 'rb')
training_data, validation_data, test_data = cPickle.load(f)
f.close()
return (training_data, validation_data, test_data)
def load_data_wrapper():
tr_d, va_d, te_d = load_data()
....
但是导致UnicodeDecodeError,根据网上的建议,我把cPickle.load(f)改成pickle.load(f, encoding='latin1')
当我在shell中运行时也会出现同样的错误
>>> training_data, validation_data, test_data = \
... mnist_loader.load_data_wrapper() \
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "C:\E\Deep Learning Tutorial\neural-networks-and-deep-learning-master\src\mnist_loader.py", line 68, in load_data_wrapper
tr_d, va_d, te_d = load_data()
File "C:\E\Deep Learning Tutorial\neural-networks-and-deep-learning-master\src\mnist_loader.py", line 43, in load_data
并且错误行追溯到:
f = gzip.open('../data/mnist.pkl.gz', 'rb')
和以前一样的错误,但只发生在不同的行
UnicodeDecodeError: 'ascii' codec can't decode byte 0x90 in position 614: ordinal not in range(128)
如何解决这个问题?
【问题讨论】:
-
您是否尝试将 `# -- coding: utf-8 --` 行放在文件的最顶部
-
@csharpcoder 我试过你的代码。添加后,错误是一样的,但是错误行变成了
f.close(),真是奇怪 -
@csharpcoder 另外,如果我把注释行
#training_data, validation_data, test_data = cPickle.load(f),那么错误行将变为#training_data, validation_data, test_data = cPickle.load(f) -
尝试使用
pickle.load(f, encoding='bytes')。它告诉 pickle 如何解码由 Python 2 腌制的 8 位字符串实例,默认为‘ASCII’。 -
@martineau 链接是github.com/mnielsen/neural-networks-and-deep-learning/archive/…,非常感谢您的好意!
标签: python python-3.x gzip pickle