4

我正在使用 LSTM 网络进行多变量多时间步长预测。所以基本上seq2seq预测将一些n_inputs输入到模型中以预测n_outputs时间序列的数量。

我的问题是如何有意义地应用DropoutBatchnNormalization因为这似乎是 Recurrent 和 LSTM 网络的一个高度讨论的话题。为了简单起见,让我们坚持使用 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 层之后使用 BatchNormalization 是一种好习惯吗?
  • Q2:在 LSTM 层中使用 Dropout 是一种好习惯吗?
  • Q3:在密集层之间使用 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:在层间使用时应该BatchNormalozationDropout包裹在里面,还是不用它们是正确的?TimeDistributedTimeDistributed(Dense())
  • Q6:可以或应该在编码器-解码器 LSTM 块之后、之前或之间应用批标准化吗?
  • Q7:如果将一个ConvLSTM2D层用作第一层(编码器),这会对 Dropout 和 BatchNormalization 的使用产生影响吗?

  • Q8:recurrent_dropout参数应该在 LSTM 块中使用吗?如果是,它应该与dropout示例中的普通参数结合使用,还是应该交换?非常感谢您!

4

0 回答 0