web-dev-qa-db-fra.com

pickle python UnicodeDecodeError

J'essaie de charger le jeu de données mnist character (en suivant le tutoriel décrit ici: http://neuralnetworksanddeeplearning.com/chap1.html )

quand j'exécute la fonction load_data_wrapper, j'obtiens l'erreur.

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

Le code exécuté est: 

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

MISE À JOUR: Le problème semble être que j'essaie de dissocier Python 3.6, qui a été traité avec Python 2.x. 

9

Comme indiqué, le problème principal s'est révélé être une incompatibilité entre python 2.x cPickle et pickle 3.x. 

régler l'encodage sur 'latin-1' semble fonctionner. 

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

La réponse ici a beaucoup aidé: L’incompatibilité entre les tableaux numpy entre Python 2 et 3

15

Vous pouvez essayer ceci:

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