2017-06-21 3 views
0

Mon code est le suivant:MNIST ValueError lors de la vérification cible dans Keras

from keras.datasets import mnist 
from keras.utils import np_utils 
from keras.models import Sequential 
from keras.layers import Dense, Activation 

(x_train, y_train), (x_test, y_test) = mnist.load_data() 
y_train = np_utils.to_categorical(y_train, 10) 
y_test = np_utils.to_categorical(y_test, 10) 

model = Sequential() 

model.add(Dense(output_dim=500, input_shape=(28, 28))) 
model.add(Activation("tanh")) 
model.add(Dense(10)) 
model.add(Activation("softmax")) 

model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy']) 
model.fit(x_train, y_train, nb_epoch=50, batch_size=20) 

Cela obtient l'erreur suivante:

ValueError: Error when checking target: expected activation_2 to have 3 dimensions, but got array with shape (60000, 10) 

Je pense que la forme (60000, 10) est la forme de y_train et cela a 2 dimensions alors que prévu 3 dimensions quelque part.

Où dois-je modifier?

Répondre

0

Les échantillons MNIST sont des images de 28 x 28 valeurs (pixels). Vous voulez classer avec un ANN qui ne prend qu'un tableau de nombres à une dimension (imaginez la première couche de votre ANN comme une longue rangée de 500 neurones qui ne comprennent qu'une longue rangée de 500 mais pas une matrice de 28x28).

Pour corriger votre erreur, vous devez remodeler vos données au préalable:

(X_train, y_train), (X_test, y_test) = mnist.load_data() 

X_train = X_train.reshape(60000, 784) 
X_test = X_test.reshape(10000, 784) 
X_train = X_train.astype('float32') 
X_test = X_test.astype('float32') 

Y_train = np_utils.to_categorical(y_train, 10) 
Y_test = np_utils.to_categorical(y_test, 10) 

... 

model = Sequential() 
model.add(Dense(512, input_shape=(784,))) 

Si vous souhaitez alimenter vos données en 2D pour obtenir plus de précision en préservant l'ordre spatial de vos images plutôt que de les aplatir à une longue liste de nombres que vous devez changer votre architecture de modèles à un réseau de neurones convolutif (beaucoup d'exemple de code en ligne, en particulier pour MNIST).