проверочный набор получает более высокую точность, чем обучающий набор для LSTM RNN, так как скорость обучения становится меньше - PullRequest
0 голосов
/ 31 мая 2018

В настоящее время я пытаюсь проверить различия в поведении между RNN LSTM и RNN GRU при прогнозировании временных рядов (классификация 1/0, если временной ряд идет вверх или вниз).Я использую метод fit_generator (как в книге Кераса Франсуа Шолье)

Я передаю 30 точек в сеть, а следующая точка должна быть классифицирована как вверх или вниз.Образцы обучающего набора перетасовываются, в то время как проверочные образцы, конечно, не совпадают.

Если я не изменяю значение по умолчанию для скорости обучения (10-3 для алгоритма Адама), то обычно происходит, обучающий набор имеет тенденциюбыть переоснащенным после определенного количества эпох, как для ячеек LSTM, так и для ячеек GRU.

слой LSTM 1 128N

Обратите внимание, что мои графики усредняются с 10 имитациями (этоспособ, которым я избавляюсь от случайной инициализации конкретного веса)

Если я выберу более низкие скорости обучения, точность обучения и валидации будет показана ниже влияния другой скорости обучения, мне кажется, что тренировочный набор не способенбольше перебирать (???)

влияние скорости обучения на сеть GRU

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

2 слоя LSTM LR = 1e-5

2 слоя GRU LR= 1e-5

Обратите внимание, что это менее подчеркнуто для 1 слоя LSTM

1 слой LSTM LR = 1e-5

IЯ проверил это с 1 или 2 слоями и для другого набора проверки, но результаты схожи.

выдержка из моего кода ниже:

modelLSTM_2a = Sequential()
modelLSTM_2a.add(LSTM(units=32, input_shape=(None, data.shape[-1]),return_sequences=True))
modelLSTM_2a.add(LSTM(units=32, input_shape=(None, data.shape[-1]),return_sequences=False))
modelLSTM_2a.add(Dense(2))
modelLSTM_2a.add(Activation('softmax'))
adam  = keras.optimizers.Adam(lr=1e-5, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)
modelLSTM_2a.compile(optimizer= adam, loss='categorical_crossentropy', metrics=['accuracy'])

Кто-нибудь может понять, что может произойти?

Я действительно озадачен этим поведением, особенно влиянием скорости обучения в случае LSTM

...