2015-08-02 22 views
5

Sto tentando di utilizzare lo mnist_data per il riconoscimento delle cifre scritte a mano. Ora ho provato questo codice per caricare i dati.cPickle.UnpicklingError: chiave di caricamento non valida, ''.?

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

Ma sto ricevendo questo errore.

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

non riuscivo a capire che cosa l'errore sta cercando di dire e come rimuovere questo error..Thanks in anticipo ..

risposta

4

L'argomento passato a cPickle.load() deve essere un file .pkl. mnist.pkl è fornito all'interno di mnist.pkl.gz

Quindi, per prima cosa è necessario aprire .gz. Prova questo:

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

La prima soluzione a tutti i problemi salamoia è usare "salamoia" invece di "cPickle" fino a quando non hai eseguito il debug di tutto. Otterrai messaggi di errore molto migliori e potrai eseguire il debug in modo migliore.

Sembra che tu abbia gipaggiato la tua salamoia. Avrai bisogno di decomprimere prima di caricare.

Il tuo software ha prodotto il pickle e sei sicuro che l'oggetto da rimuovere non sia una tupla?

0

Questo ha funzionato per me:

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