2016-03-16 6 views
1

J'utilise Keras pour construire et former un réseau neuronal récurrent.Keras perte extrêmement élevée, ne diminue pas à chaque époque

from keras.models import Sequential 
from keras.layers.core import Dense, Activation, Masking 
from keras.layers.recurrent import LSTM 

#build and train model 
in_dimension = 3 
hidden_neurons = 300 
out_dimension = 2 

model = Sequential() 
model.add(Masking([0,0,0], input_shape=(max_sequence_length, in_dimension))) 
model.add(LSTM(hidden_neurons, return_sequences=True, input_shape=(max_sequence_length, in_dimension))) 
model.add(LSTM(hidden_neurons, return_sequences=False)) 
model.add(Dense(out_dimension)) 
model.add(Activation('softmax')) 

model.compile(loss="categorical_crossentropy", optimizer="rmsprop") 
model.fit(padded_training_seqs, training_final_steps, nb_epoch=5, batch_size=1) 

padded_training_seqs est une une matrice de séquences de [latitude, longitude, température], tous rembourré à la même longueur avec des valeurs de [0,0,0]. Quand je forme ce réseau, la première époque me donne une perte d'environ 63, et augmente après plus d'époques. Cela provoque un appel model.predict plus tard dans le code pour donner des valeurs qui sont complètement hors des valeurs d'entraînement. Par exemple, la plupart des valeurs d'apprentissage dans chaque séquence est autour de [40, 40, 20], mais le RNN génère des valeurs uniformément autour de [0.4, 0.5], ce qui me fait penser que quelque chose ne va pas avec la couche de masquage.

Les données de formation X (padded_training_seqs) ressemble à quelque chose comme ça (seulement beaucoup plus): les données

[ 
[[43.103, 27.092, 19.078], [43.496, 26.746, 19.198], [43.487, 27.363, 19.092], [44.107, 27.779, 18.487], [44.529, 27.888, 17.768]], 
[[44.538, 27.901, 17.756], [44.663, 28.073, 17.524], [44.623, 27.83, 17.401], [44.68, 28.034, 17.601], [0,0,0]], 
[[47.236, 31.43, 13.905], [47.378, 31.148, 13.562], [0,0,0], [0,0,0], [0,0,0]] 
] 

et la formation Y (training_final_steps) ressemble à ceci:

[ 
[44.652, 39.649], [37.362, 54.106], [37.115, 57.66501] 
] 
+1

Une fonction de perte croissante à l'entraînement me fait toujours douter de la course avec un taux d'apprentissage trop élevé. Avez-vous essayé de réduire cela, vous pouvez ajuster cela en passant une instance 'keras.optimizers.RMSprop' à l'appel' model.compile'. –

+0

@SimonGibbons Merci, mais j'ai corrigé ce problème mais maintenant un appel model.predict renvoie toujours la même valeur, indépendamment des données x qui y sont introduites. Savez-vous ce qui pourrait causer cela? L'ensemble du projet est ici https://github.com/jeshaitan/migration-lstm – jeshaitan

+0

Salut, comment avez-vous résolu votre problème? Avez-vous vraiment un taux d'apprentissage élevé? De votre programme, je suppose que vous utilisez le taux d'apprentissage par défaut, qui est de 0,01 droit? – fluency03

Répondre

0

Je suis un peu certain que vous abusez de la couche de masquage de Keras. Consultez la documentation here pour plus de détails.

Essayez d'utiliser une couche de masquage comme:

model.add(Masking(0, input_shape=(max_sequence_length, in_dimension)))

parce que je crois qu'il a juste besoin de la valeur de masquage dans la dimension timestep, pas tout le temps dimension et de la valeur (c.-à-[0,0,0 ]).

Bonne chance.