今天在运行代码中时遇到了下面的错误,经过多方努力后终于得到解决,在此记录一下。
错误日志如下:
>>> import mnist_loader
>>> training_data, validation_data, test_data=mnist_loader.load_data_wrapper()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\zlr\neural-networks-and-deep-learning-master\src\mnist_loader.p
y", line 68, in load_data_wrapper
tr_d, va_d, te_d = load_data()
File "C:\Users\zlr\neural-networks-and-deep-learning-master\src\mnist_loader.p
y", line 43, in load_data
training_data, validation_data, test_data = pickle.load(f)
UnicodeDecodeError: 'ascii' codec can't decode byte 0x90 in position 614: ordinal not in range(128)
>>>
根据以上信息可以判断出错处在pickle.load(f)调用的时候解码出了问题。
load函数是从文件中读出数据,并将其转换为对象数据。那么问题就出在直接调用load(f)不能将ascii解码为byte类型数据。
网上查了一堆资料,说的最多的是下面这种方式:
if sys.getdefaultencoding() != 'utf-8':
reload(sys)
sys.setdefaultencoding('utf-8')
然而,亲测后并没有解决问题。
后来查看了load接口,load在加载文件时是可以指定encoding类型的,于是将代码修改为training_data, validation_data, test_data = pickle.load(f,encoding='bytes')后问题解决。