Keras LSTM的无状态和有状态的区别

4
我正在尝试理解Keras中的LSTM层的概念。 我只是想确认一些LSTM的行为并检查是否理解正确。
假设我有1000个样本,这些样本有1个时间步长,并且当批量大小为1时。
stateful = True

这是否与一份包含1000个时间步骤和批处理大小为1的样本相同?
stateful = False

这里我假设在两种情况下我有相同的信息,只是呈现形式不同,并且每个训练周期后都重置我的LSTM层状态。
我认为,无状态情况下的批量大小仅对我的训练序列有影响,因为如果我设置
stateful = False 

我可以使用input_shape而不是batch_input_shape。因此,我的LSTM层不需要批量维度,只需要时间步长和特征维度。这个理解正确吗?
我得到了这个结论:

https://github.com/keras-team/keras/blob/master/keras/layers/recurrent.py#L1847

Keras何时重置LSTM状态?

理解Keras LSTMs

如果我有一个多层LSTM网络,如果第一层LSTM是有状态的,那么所有其他层也应该是有状态的,对吗?

希望有人能理解我的意思并能够帮助我。如果我的问题不清楚,请告诉我,我会更新这篇文章。

谢谢大家。


你为什么同时打上了[stateless]和[stateful]的标签? - jhpratt
因为我想理解两种情况的差异。 - D.Luipers
1个回答

3

stateful=True 表示您保留每个批次的最终状态,并将其作为下一批次的初始状态传递。因此,在这种情况下,如果您有1000个样本的1个批次或1000个1个样本的批次,它们是相同的。


好的,我明白它们之间的区别了,但是在这两种情况下,我都会有一个包含1000个时间步长的序列,不是吗?因为在无状态的情况下,我的样本或序列只有1000个时间步长,在有状态的情况下,LSTM会将我的1000个序列中的1个时间步长视为1个序列,对吧? - D.Luipers
无状态的LSTM不存在。如果没有状态,那就只是一个普通的神经网络。对于“有状态”的情况来说,它不同,因为在1个1000时间步骤的序列中,你会处理1000个具有不同参数的不同单元格,并且在1000个序列中,你只会通过1个单元格。 想象一下你的LSTM网络像一个隧道。在第一种情况下,隧道很长,你只通过1次。在另一种情况下,隧道很短,你通过它1000次。 - Mael Galliffet
作为无状态案例,我理解这意味着return_state=False,这是keras的标准设置。我忘了提到我指的是多对一的情况,但我认为我已经明白了它的工作原理,只是无法用言语表达出来。所以在第一种情况下,当retun_state = True时,就像将短隧道连接成一个长隧道一样,是吗?因此状态将传递给每个批次。 - D.Luipers
刚刚查了一下文档,看起来你是对的,stateful=True意味着你保留每个批次的最终状态,并将其作为下一个批次的初始状态传递。所以,在这种情况下,如果你有1个包含1000个样本的批次或者1000个包含1个样本的批次,可能是一样的。 - Mael Galliffet
好的,如果你能够更新你的答案,我就可以将其标记为正确的 :) - D.Luipers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接