6

我正在尝试使用mnist_data进行手写数字识别。现在我尝试使用此代码加载数据。

import cPickle
import numpy as np


def load_data():
    f = open('G:/thesis paper/data sets/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_nn():
    training_data, validation_data, test_data = load_data()
    inputs = [np.reshape(x, (784, 1)) for x in training_data[0]]
    results = [vectorized_result(y) for y in training_data[1]]
    training_data = zip(inputs, results)
    test_inputs = [np.reshape(x, (784, 1)) for x in test_data[0]]
    return (training_data, test_inputs, test_data[1])


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


if __name__ == '__main__':
    tr_data,test_inp,test_data=load_data_nn()

但我收到了这个错误。

   File "D:/NeuralNet/mnist_loader.py", line 42, in load_data
     training_data, validation_data, test_data = cPickle.load(f) cPickle.UnpicklingError: invalid load key, ''.

我无法理解错误要说什么以及如何删除此错误..在此先感谢..

4

3 回答 3

5

您传递给 cPickle.load() 的参数必须是 .pkl 文件。mnist.pkl 在 mnist.pkl.gz 内部提供

所以,你必须先打开那个.gz。尝试这个:

import gzip
f = gzip.open('mnist.pkl.gz', 'rb')
train_set, valid_set, test_set = cPickle.load(f)
于 2015-08-07T17:34:20.490 回答
1

这对我有用:

f = gzip.open('../data/mnist.pkl.gz', 'rb')
training_data, validation_data, test_data = cPickle.load(f,encoding='latin1')
f.close()
于 2017-12-15T15:31:05.090 回答
1

所有 pickle 问题的第一个解决方案是使用“pickle”而不是“cPickle”,直到您调试完所有内容。您将获得更好的错误消息并且可以更好地调试。

看起来你已经压缩了你的泡菜。您需要在加载之前解压缩。

您自己的软件是否生成了pickle,并且您确定要解开的对象是一个元组吗?

于 2015-08-02T19:07:30.147 回答