如何将 keras LSTM 层的输出输入到输入层?

Posted

技术标签:

【中文标题】如何将 keras LSTM 层的输出输入到输入层?【英文标题】:How to feed output of keras LSTM layer into input layer? 【发布时间】:2020-03-12 19:03:53 【问题描述】:

我对 tensorflow 和 keras 还很陌生,有一个问题。 我想使用 LSTM 层进行时间序列预测,并进行一些修改。我从 tensorflow 教程中给出的示例开始

def build_LSTM(neurons, batch_size, history_size, features):
   model = tf.keras.models.Sequential()
   model.add(tf.keras.layers.LSTM(neurons, 
                                  batch_input_shape=(batch_size, history_size, features),
                                  stateful=True))
   model.add(tf.keras.layers.Dense(1))
   model.compile(loss='mean_squared_error', optimizer='adam')
   return(model)

在示例的当前状态下,模型的输入为(观察、时间步长、特征)形式,它返回单个数字(下一个时间步长的预测)。

我想做的是在 LSTM 层中使用模式return_sequence=True

返回一个形状为 T 的张量(时间步长、特征)是否正确?

有没有办法将此张量从一个步骤(假设观察 = 1)转移到下一步(观察 = 2)?我猜对应的图表应该是这样的:

【问题讨论】:

您这样做是为了达到什么目的? :) 【参考方案1】:

回答您的问题,这是否正确返回一个形状为 T 的张量(时间步长、特征)?

答案是肯定的,输出是每个时间步的输出的张量。

另一个问题,有没有办法将此张量从一个步骤(假设观察 = 1)转移到下一步(观察 = 2)?

这个问题很难回答,从技术上讲,当您指定 return_sequence=True 时,它​​会自动计算每个时间步,并在计算下一个时间步时将“当前状态”作为初始状态提供给它自己,直到它计算您的所有数据并给出您在问题 1 中提出的 Tensor 输出。因此,如果您希望此张量用于进一步计算,例如您想总结奇数时间步的所有答案,这是可能的。此外,如果您想将最后一个状态传递给下一批输入,您可以通过提供 stateful=True 参数来实现。

但是,如果您想将上一个时间步的输出馈送到当前时间步(类似于闭环控制),无论给定模型如何,您都需要创建自己的循环单元并将其与 RNN 层一起使用 @987654321 @。

【讨论】:

以上是关于如何将 keras LSTM 层的输出输入到输入层?的主要内容,如果未能解决你的问题,请参考以下文章

带有用于可变长度输入的掩蔽层的 Keras lstm

keras---cnn---rnn---lstm

如何通过keras获得每个图层的输出值?

Python keras如何将卷积层转换为lstm层后的输入大小

Keras LSTM 层输入形状

如何在 Keras 中建模卷积循环网络 (CRNN)