2

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

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 机制,所以我非常感谢任何帮助:)

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

4

1 回答 1

2

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

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

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

[更新]

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

于 2018-10-27T10:20:17.400 回答