2015-08-26 3 views
0

J'ai une configuration de réseau de neurones réseau pour l'ensemble de données de chiffres MNIST dans Keras qui ressemble à ceci:Neural dimension mal-match

input_size = features_train.shape[1] 
hidden_size = 200 
output_size = 9 
lambda_reg = 0.2 
learning_rate = 0.01 
num_epochs = 50 
batch_size = 30 

model = Sequential() 
model.add(Dense(input_size, hidden_size, W_regularizer=l2(lambda_reg), init='normal')) 
model.add(Activation('tanh')) 
model.add(Dropout(0.5)) 

model.add(Dense(hidden_size, output_size, W_regularizer=l2(lambda_reg), init='normal')) 
model.add(Activation('softmax')) 

sgd = SGD(lr=learning_rate, decay=1e-6, momentum=0.9, nesterov=True) 
model.compile(loss='mean_squared_error', optimizer=sgd) 

history = History() 

model.fit(features_train, labels_train, batch_size=batch_size, nb_epoch=num_epochs, show_accuracy=True, verbose=2, validation_split=0.2, callbacks=[history]) 
score = model.evaluate(features_train, labels_train, show_accuracy=True, verbose=1) 
predictions = model.predict(features_train) 
print('Test score:', score[0]) 
print('Test accuracy:', score[1]) 

features_train est de forme (1000,784), labels_train est (1000,1), et les deux sont des tableaux numpy. Je veux 784 noeuds d'entrée, 200 cachés, et 9 sortie pour classer les chiffres

Je continue à obtenir une erreur de décalage de dimension d'entrée:

Input dimension mis-match. (input[0].shape[1] = 9, input[1].shape[1] = 1) 
Apply node that caused the error: Elemwise{Sub}[(0, 0)](AdvancedSubtensor1.0, AdvancedSubtensor1.0) 
Inputs types: [TensorType(float32, matrix), TensorType(float32, matrix)] 
Inputs shapes: [(30L, 9L), (30L, 1L)] 
Inputs strides: [(36L, 4L), (4L, 4L)] 
Inputs values: ['not shown', 'not shown'] 

Je suis en train de déterminer où mes dimensions peuvent être incorrectes mais je Je ne le vois pas. Quelqu'un peut-il voir le problème?

Répondre

0

J'ai entraîné deux modèles de classification de classes pendant si longtemps que j'ai l'habitude de traiter avec des étiquettes qui ne sont que des valeurs uniques. Pour ce problème (classifiant plus de 1 résultat), j'ai juste dû changer les étiquettes pour qu'elles soient elles-mêmes des vecteurs.

Ceci a résolu mon problème:

from keras.utils.np_utils import to_categorical 

labels_train = to_categorical(labels_train) 
+0

taille de sortie doit être 10. Vous avez 0-9 chiffres –