Keras 具有stateful=True的多层LSTM网络

Keras 具有stateful=True的多层LSTM网络,keras,lstm,multi-layer,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(

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

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机制,因此我非常感谢您的帮助:)


如果你否决了这篇文章,你能告诉我为什么在命令中?谢谢。

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

LSTM需要3D输入。因为第一个LSTM层的输出将进入第二个LSTM层的输入。第二个LSTM层的输入也应为3D。因此,我们将retrun序列设置为true,因为它将返回一个3D输出,然后可以用作第二个LSTM的输入

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

[更新]

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

来重置状态,如果我理解正确,您正在声明返回序列是如何工作的,但我更关心的是在每批训练数据之后重置LSTM状态,因此如果您希望在每批训练数据之后不重置状态,您可以设置stateful=True,,,,,您可以在lstmYes的两个层中维护状态。但是,让一个层的stateful=True,下一个层的stateful=False有什么意义呢?代码只是说,在第一层中,权重在每批之后不会重置,,因此,一个批次的最终状态将用作另一个批次的初始状态…在第二层中,每个批次的状态都会重置..目的是一个非常普遍的情况,可能他们在超参数调整期间发现它最适合。据我所知,仅重置存储单元的状态,而不是重置lstm单元的权重