Как использовать Dropout и BatchNormalization в сетях LSTM (Keras) - PullRequest
1 голос
/ 13 июня 2019

Я использую LSTM Networks для многовариантных многоэтапных прогнозов.Таким образом, в основном seq2seq предсказание, где число n_inputs вводится в модель для предсказания числа n_outputs временного ряда.

Мой вопрос заключается в том, как осмысленно применить Dropout иBatchnNormalization поскольку это, кажется, очень обсуждаемая тема для Recurrent и, следовательно, LSTM Networks.Придерживаемся Keras как основы для простоты.

Случай 1: Ваниль LSTM

model = Sequential()
model.add(LSTM(n_blocks, activation=activation, input_shape=(n_inputs, n_features), dropout=dropout_rate))
model.add(Dense(int(n_blocks/2)))
model.add(BatchNormalization())
model.add(Activation(activation))
model.add(Dense(n_outputs))
  • Q1: Это хорошая практика, чтобы не использоватьПакетная нормализация сразу после слоев LSTM?
  • Q2: Хорошая ли практика использовать Dropout внутри слоя LSTM?
  • В3. Является ли использование BatchNormalization и Dropout между плотными слоями хорошей практикой?
  • Q4: Если я укладываю несколько слоев LSTM, целесообразно ли использовать BatchNormalization между ними?

Случай 2: Декодер-декодер типа LSTM с распределенными по времени слоями

model = Sequential()
model.add(LSTM(n_blocks, activation=activation, input_shape=(n_inputs,n_features), dropout=dropout_rate))
model.add(RepeatVector(n_outputs))
model.add(LSTM(n_blocks, activation=activation, return_sequences=True, dropout=dropout_rate))
model.add(TimeDistributed(Dense(int(n_blocks/2)), use_bias=False))
model.add(TimeDistributed(BatchNormalization()))
model.add(TimeDistributed(Activation(activation)))
model.add(TimeDistributed(Dropout(dropout_rate)))
model.add(TimeDistributed(Dense(1)))
  • Q5: должны BatchNormalozation и Dropout обернуты внутрь TimeDistributedслои при использовании между TimeDistributed(Dense()) слоями, или правильно оставить их без?
  • Q6: Можно или нет применять пакетную обработку после, до или между блоками LSTM кодировщика-декодера?
  • Q7: Если слой ConvLSTM2D используется в качестве первого слоя (кодировщик), это изменит разницу в использовании Dropout и BatchNormalization?

  • Q8: должен лиrecurrent_dropout аргумент будет использоваться внутри блоков LSTM?Если да, следует ли его объединить с обычным аргументом dropout, как в примере, или его следует заменить?Заранее большое спасибо!

...