gpt4 book ai didi

python - 使用 gzip 和 pickle 时出现 UnicodeDecodeError

转载 作者:行者123 更新时间:2023-11-28 17:10:49 25 4
gpt4 key购买 nike

我正在使用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)

如何解决这个问题?

最佳答案

首先,我能够使用从 https://github.com/mnielsen/neural-networks-and-deep-learning/archive/master.zip 中提取的 mnist.pkl.gz 数据文件重现该问题。我下载的存档。 pickle.load(f) 调用引发了以下异常:

UnicodeDecodeError:“ascii”编解码器无法解码位置 614 中的字节 0x90:序号不在范围内 (128)

但是,当我按照我在下面评论中的建议将 encoding='bytes' 参数添加到 pickle.load() 调用时,错误消失了你的问题。

另一个更改是将 import _pickle as cPickle 替换为 import pickle,但我认为这并不重要(请参阅 What difference between pickle and _pickle in python 3?)。

但是,可能 的其他差异是我在 Windows 上使用 Python 3.6.3。

import gzip
import pickle

def load_data():
f = gzip.open('mnist.pkl.gz', 'rb')
training_data, validation_data, test_data = \
pickle.load(f, encoding='bytes') # Note encoding argument value.
f.close()
return (training_data, validation_data, test_data)

def load_data_wrapper():
tr_d, va_d, te_d = load_data()
print('gzipped pickled data loaded successfully')

load_data_wrapper()

题外话:load_data() 函数可以像这样更简洁地编写:

def load_data():
with gzip.open('mnist.pkl.gz', 'rb') as f:
training_data, validation_data, test_data = \
pickle.load(f, encoding='bytes')
return training_data, validation_data, test_data

关于python - 使用 gzip 和 pickle 时出现 UnicodeDecodeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47628400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com