状态为True的多层LSTM网络

时间:2018-10-26 16:45:58

标签: keras lstm multi-layer

我的问题是这段代码有意义吗?如果这有意义,目的是什么?

model.add(LSTM(18, return_sequences=True,batch_input_shape=(batch_size,look_back,dim_x), stateful=True))
model.add(Dropout(0.3))
model.add(LSTM(50,return_sequences=False,stateful=False))
model.add(Dropout(0.3))
model.add(Dense(1, activation='linear'))

因为如果我的第一个LSTM层将我的状态从一批返回到下一批,为什么我的第二个LSTM层也不应该一样?

我很难理解Keras中的LSTM机制,因此我非常感谢您的任何帮助:)

如果您对此文章投反对票,您能告诉我为什么在命令中吗?谢谢。

1 个答案:

答案 0 :(得分:1)

您的程序是一个回归问题,您的模型由2个lstm层组成,每层分别有18和50层,最后是一个致密层以显示回归值。

LSTM需要3D输入,因为第一个LSTM层的输出将进入第二个LSTM层的输入,第二个LSTM层的输入也应该是3D形式。因此我们在1st中将重新运行序列设置为true,因为它将返回3D输出,然后可以将其用作第二个LSTM的输入。

您的第二个LSTM值不返回序列,因为在第二个LSTM之后,您有一个密集层,不需要3D值作为输入。

[更新]

在keras中,默认情况下,每批训练数据后都会重置LSTM状态,因此,如果您不想在每一批训练数据后都重置状态,则可以设置stateful = True。如果将LSTM设置为有状态,则批次的最终状态将用作下一个批次的初始状态。 您以后可以通过调用reset_states()

来重置状态