Я использую 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
, как в примере, или его следует заменить?Заранее большое спасибо!