2016-06-13 1 views
2

Je me méprends un peu sur la façon de créer une Séquence simple pour mes données.Spécification du Dense à l'aide de la librairie keras

Les données ont les dimensions suivantes:

X_train.shape 
(2369, 12) 

y_train.shape 
(2369,) 

X_test.shape 
(592, 12) 

y_test.shape 
(592,) 

Voici comment je crée le modèle:

batch_size = 128 
nb_epoch = 20 
in_out_neurons = X_train.shape[1] 
dimof_middle = 100 

model = Sequential() 
model.add(Dense(batch_size, batch_input_shape=(None, in_out_neurons))) 
model.add(Activation('relu')) 
model.add(Dropout(0.2)) 
model.add(Dense(batch_size)) 
model.add(Activation('relu')) 
model.add(Dropout(0.2)) 
model.add(Dense(in_out_neurons)) 
model.add(Activation('linear')) 

# I am solving the regression problem, not the classification one 
model.compile(loss="mean_squared_error", optimizer="rmsprop") 

history = model.fit(X_train, y_train, 
        batch_size=batch_size, nb_epoch=nb_epoch, 
        verbose=1, validation_data=(X_test, y_test)) 

Le message d'erreur:

Exception: Erreur lors de la vérification d'entrée du modèle : attendu dense_input_14 à avoir la forme (Aucun, 1) mais a obtenu le tableau avec la forme (2369, 12) ç

L'erreur est:

Erreur lorsque la cible du modèle de vérification: activation_42 devrait avoir la forme (Aucun, 12), mais ensemble obtenu avec la forme (2369, 1)

Cette erreur se produit à la ligne:

model.add(Dense(in_out_neurons)) 

Comment changer Dense pour le faire fonctionner?

Une autre question est comment ajouter un autoencoder simple afin d'initialiser les poids de ANN?

Répondre

4

Un de vos problèmes est que vous semblez mal comprendre ce qu'est un lot. Un lot est le nombre d'échantillons d'apprentissage calculés à la fois, donc au lieu de calculer un échantillon d'apprentissage à partir de X_train à un moment où vous utilisez, par exemple, 100 à la fois. L'important ici est que cela n'a rien à voir avec votre modèle.

Alors, quand vous écrivez

model.add(Dense(batch_size, batch_input_shape=(None, in_out_neurons))) 

vous créez un calque entièrement connecté avec une taille de sortie d'un lot. Cela n'a pas beaucoup de sens.

Un autre problème est que la sortie de votre modèle est de 12 neurones alors que votre Y est seulement une valeur/neurone. Votre modèle ressemble à ceci:

| 
    v 
[128] 
[128] 
[ 12] 
    | 
    v 

Alors qu'est-ce fit() n'est, il introduit une matrice de forme (128, 12) ((batch size, X_train.shape[1])) dans le modèle et tente de comparer la sortie de forme (128,12) de la dernière couche aux Y valeurs correspondantes du lot (forme (128,1)).