【问题标题】:python pickle UnicodeDecodeErrorpython pickle UnicodeDecodeError
【发布时间】:2017-03-22 11:44:33
【问题描述】:

我正在尝试加载 mnist 字符数据集(按照此处概述的教程:http://neuralnetworksanddeeplearning.com/chap1.html

当我运行 load_data_wrapper 函数时出现错误。

UnicodeDecodeError: 'ascii' codec can't decode byte 0x90 in position 614: ordinal not in range(128)

运行的代码是:

import numpy as np
import gzip


def load_data():
    f = gzip.open('../data/mnist.pkl.gz', 'rb')
    training_data, validation_data, test_data = pickle.load(f)
    f.close()
    return (training_data, validation_data, test_data)

def load_data_wrapper():
    tr_d, va_d, te_d = load_data()
    training_inputs = [np.reshape(x, (784,1)) for x in tr_d[0]]
    training_results = [vectorized_result(y) for y in tr_d[1]]
    training_data = zip(training_inputs, training_results)
    validation_inputs = [np.reshape(x,(784, 1))for x in va_d[0]]
    validation_data = zip(validation_inputs, va_d[1])
    test_inputs = [np.reshape(x, (784, 1)) for x in te_d[0]]
    test_data = zip(test_inputs, te_d[1])
    return(training_data, validation_data, test_data)

def vectorized_result(j):
    e = np.zeros((10,1))
    e[j] = 1.0
    return e

更新:问题似乎是我试图用 python 3.6 解压,它是用 python 2.x 腌制的。

【问题讨论】:

    标签: python pickle mnist


    【解决方案1】:

    如上所述,主要问题是 python 2.x cPickle 和 python 3.x pickle 之间的不兼容。

    将编码设置为“latin-1”似乎可行。

    training_data, validation_data, test_data = pickle.load(f, encoding='latin1')
    

    这里的回答很有帮助:Pickle incompatability of numpy arrays between Python 2 and 3

    【讨论】:

      【解决方案2】:

      你可以试试这个:

        import chainer  
        train, test = chainer.datasets.get_mnist(ndim=1)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-21
        • 2016-04-25
        • 2014-02-22
        相关资源
        最近更新 更多