2016-03-16 5 views
1

Я использую Keras для создания и обучения повторяющейся нейронной сети.Keras чрезвычайно высокие потери, не уменьшающиеся с каждой эпохой

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 представляет собой массив из последовательностей [широта, долгота, температура], все проложенный на одинаковую длину со значениями [0,0,0]. Когда я тренирую эту сеть, первая эпоха дает мне потерю около 63, а увеличивает после более эпох. Это вызывает звонок model.predict позже в коде, чтобы дать значения, которые полностью не соответствуют значениям обучения. Например, большинство значений обучения в каждой последовательности составляют около [40, 40, 20], но RNN выводит значения последовательно около [0.4, 0.5], что заставляет меня думать, что что-то не так с маскирующим слоем.

Обучение X (padded_training_seqs) данных выглядит примерно так (только гораздо больше):

[ 
[[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]] 
] 

и обучение Y (training_final_steps) данных выглядит следующим образом:

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

Функция увеличения потерь при тренировке всегда заставляет меня подозрительно работать со слишком высокой скоростью обучения. Вы попытались уменьшить это, вы можете настроить это, передав экземпляр 'keras.optimizers.RMSprop' на вызов' model.compile'. –

+0

@SimonGibbons Спасибо, но я исправил эту проблему, но теперь вызов model.predict всегда возвращает одно и то же значение, независимо от того, какие данные х были переданы в него. Вы знаете, что может быть причиной этого? Весь проект здесь https://github.com/jeshaitan/migration-lstm – jeshaitan

+0

Привет, как вы исправили свою проблему? У вас действительно высокий уровень обучения? Из вашей программы, я думаю, вы используете скорость обучения по умолчанию, которая равна 0,01 правильно? – fluency03

ответ

0

Я несколько что вы неправильно используете слой Masking от Keras. Для получения более подробной информации обратитесь к документации here.

Попробуйте использовать маскирующий слой, как:

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

, потому что я считаю, что это просто необходимо значение маскирования в измерении Timestep, а не все время размерности и значения (т.е. [0,0,0 ]).

Удачи.

Смежные вопросы