J'essaye de faire un exemple de base MLP dans keras. Mes données d'entrée ont la forme train_data.shape = (2000,75,75)
et mes données de test ont la forme test_data.shape = (500,75,75)
. 2000
et 500
sont les nombres d'échantillons de données d'apprentissage et de formation (en d'autres termes, la forme des données est (75,75)
, mais il y a 2000 et 500 données de formation et d'essai). La sortie devrait avoir deux classes.Keras correcte forme d'entrée pour perceptron multicouche
Je ne suis pas sûr quelle valeur utiliser pour le paramètre input_shape
sur la première couche du réseau. En utilisant le code de l'exemple mnist dans le référentiel keras, j'ai (mis à jour):
from six.moves import cPickle
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.utils import np_utils
from keras.optimizers import RMSprop
# Globals
NUM_CLASSES = 2
NUM_EPOCHS = 10
BATCH_SIZE = 250
def loadData():
fData = open('data.pkl','rb')
fLabels = open('labels.pkl','rb')
data = cPickle.load(fData)
labels = cPickle.load(fLabels)
train_data = data[0:2000]
train_labels = labels[0:2000]
test_data = data[2000:]
test_labels = labels[2000:]
return (train_data, train_labels, test_data, test_labels)
# Load data and corresponding labels for model
train_data, train_labels, test_data, test_labels = loadData()
train_labels = np_utils.to_categorical(train_labels, NUM_CLASSES)
test_labels = np_utils.to_categorical(test_labels, NUM_CLASSES)
print(train_data.shape)
print(test_data.shape)
model = Sequential()
model.add(Dense(512, input_shape=(5625,)))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(2))
model.add(Activation('softmax'))
model.summary()
model.compile(loss='categorical_crossentropy',
optimizer=RMSprop(),
metrics=['accuracy'])
history = model.fit(train_data, train_labels, validation_data=(test_data, test_labels),
batch_size=BATCH_SIZE, nb_epoch=NUM_EPOCHS,
verbose=1)
score = model.evaluate(test_data, test_labels, verbose=0)
print('Test score:', score[0])
print('Test accuracy:', score[1])
où 5625
est 75 * 75 (émulant l'exemple MNIST). L'erreur que j'obtiens est:
Error when checking model input: expected dense_input_1 to have 2 dimensions, but got array with shape (2000, 75, 75)
Des idées?
Pouvez-vous montrer plus de votre code? Incluant spécifiquement cette ligne qui vous donne cette erreur? Vous mentionnez deux variables 'train_data' et' test_data', mais je ne les vois pas utilisées dans le code, donc je ne suis pas sûr de savoir comment elles contribueraient à la situation dans laquelle vous vous trouvez. Existe-t-il un exemple de code complet, minimal? qui génère cette erreur? – onlynone
vous pourriez avoir juste besoin de remodeler 'test_data' et' train_data' pour correspondre à '5625', avec 'X.reshape (-1,75 * 75)' – toine