stateful=True 的多层 LSTM 网络

multi layer LSTM net with stateful=True

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

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 层 returns 我的状态从一批到下一批,为什么我的第二个 LSTM 层不应该做同样的事情?

我很难理解 Keras 中的 LSTM 机制,所以我非常感谢任何类型的帮助:)

如果你不赞成这个 post 你能在命令中告诉我为什么吗?谢谢。

你的程序是一个回归问题,你的模型由 2 个 lstm 层组成,每个层有 18 层和 50 层,最后是一个密集层来显示回归值。

LSTM 需要 3D input.Since 第一个 LSTM 层的输出将成为第二个 LSTM 的输入 layer.The 第二个 LSTM 层的输入也应该是 3D。所以我们在 1st 中将 retrun 序列设置为 true,因为它将 return 一个 3D 输出,然后可以用作第二个 LSTM 的输入。

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

[更新]

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

来重置状态