2015-08-02 32 views
5

Próbuję użyć mnist_data do ręcznego rozpoznawania cyfr. Teraz próbowałem tego kodu, aby załadować dane.cPickle.UnpicklingError: nieprawidłowy klucz obciążenia, "".?

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() 

Ale otrzymuję ten błąd.

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, ''. 

I nie mógł zrozumieć, co się błąd stara się powiedzieć i jak usunąć ten error..Thanks z góry ..

Odpowiedz

4

Argumentem przekazanym do funkcji cPickle.load() musi być plik .pkl. mnist.pkl znajduje się wewnątrz mnist.pkl.gz

Musisz więc najpierw otworzyć .gz. Spróbuj tego:

import gzip 
f = gzip.open('mnist.pkl.gz', 'rb') 
train_set, valid_set, test_set = cPickle.load(f) 
1

Pierwsze rozwiązanie wszystkich problemów opa jest użyć „słone” zamiast "cPickle", dopóki nie debugujesz wszystkiego. Otrzymasz znacznie lepsze komunikaty o błędach i możesz lepiej debugować.

Wygląda na to, że zgarnąłeś marynatę. Przed załadowaniem musisz rozpakować.

Czy Twoje własne oprogramowanie produkowało marynatę i czy jesteś pewien, że obiekt, który ma być niezadrukowany, to krotka?

0

Ten pracował dla mnie:

f = gzip.open('../data/mnist.pkl.gz', 'rb') 
training_data, validation_data, test_data = cPickle.load(f,encoding='latin1') 
f.close()