web-dev-qa-db-fra.com

Impossible de remodeler le tableau de taille en forme

Je suis une vidéo d'apprentissage automatique sur youtube à https://www.youtube.com/watch?v=lbFEZAXzk0g . Le tutoriel est en python2 donc je dois le convertir en python3. Voici la section du code avec laquelle j'ai une erreur:

def load_mnist_images(filename):
    if not os.path.exists(filename):
        download(filename)
    with gzip.open(filename,'rb') as file:
        data = numpy.frombuffer(file.read(),numpy.uint8, offset=16)
        data = data.reshape(-1,1,28,28)
        return data/numpy.float32(256)

J'obtiens cette erreur: ValueError: cannot reshape array of size 9992 into shape (1,28,28). Comment résoudre ce problème? Dans le didacticiel, cela fonctionnait. Aussi, si j'ai d'autres erreurs, veuillez me le dire.

1
Varun Rajkumar

le remodelage a la syntaxe suivante

data.reshape(shape)

les formes sont passées sous forme de tuples (a, b). alors essayez,

data.reshape((-1, 1, 28, 28))
1
psnbaba

Votre entrée n'a pas le même nombre d'éléments que votre tableau de sortie. Votre entrée est de taille 9992. Votre sortie est de taille [? x 1 x 28 x 28] puisque le -1 indique que la commande de remodelage doit déterminer combien d'indices le long de cette dimension sont nécessaires pour s'adapter à votre tableau. 28x28x1 est 784, donc toute entrée que vous souhaitez remodeler à cette taille doit être parfaitement divisible par 784 pour qu'elle tienne dans la forme de sortie. 9992 n'est pas divisible par 784, il renvoie donc une ValueError. Voici un exemple minimal pour illustrer:

import numpy as np

data = np.zeros(2352) # 2352 is 784 x 3
out = data.reshape((-1,1,28,28)) # executes correctly -  out is size [3,1,28,28]

data = np.zeros(9992) # 9992 is 784 x 12.745 ... not integer divisible
out = data.reshape((-1,1,28,28)) # throws ValueError: cannot reshape array of size 9992 into shape (1,28,28)

Donc, si vous ne voulez pas de ValueError, vous devez remodeler l'entrée dans un tableau de taille différente où elle s'adapte correctement.

1
DerekG