我正在使用LSTM网络进行多变量多时步预测。
因此,基本上是seq2seq
预测,其中将n_inputs
的数量输入到模型中,以便预测时间序列中的n_outputs
的数量。
我的问题是如何有意义地应用Dropout
和BatchnNormalization
,因为这似乎是递归和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))
第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)))
BatchNormalozation
和Dropout
应该在TimeDistributed
层之间使用时,应该包裹在TimeDistributed(Dense())
层中吗?还是保留它们不带走是否正确? Q7:如果将ConvLSTM2D
层用作第一层(编码器),这会在Dropout和BatchNormalization的使用方面有所不同吗?
Q8:是否应在LSTM块内使用recurrent_dropout
自变量?如果是,应将其与示例中的普通dropout
参数结合使用,还是应该交换?
提前非常感谢您!