keras lstm 区别 stateless 和 stateful

Posted

技术标签:

【中文标题】keras lstm 区别 stateless 和 stateful【英文标题】:keras lstm difference stateless and stateful 【发布时间】:2019-03-31 08:18:49 【问题描述】:

我正在尝试理解 Keras 中 LSTM 层的概念。 我只是想确认一下 LSTM 的一些行为并检查我是否理解正确。

假设我有 1000 个样本,并且这些样本有 1 个时间步长,并且我的批量大小为 1

stateful = True

这是否与 1 个具有 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

When does keras reset an LSTM state?

Understanding Keras LSTMs

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

我希望有人理解我的意思并可以帮助我。如果我的问题无法理解,请告诉我,我会更新这篇文章。

谢谢大家。

【问题讨论】:

你为什么要同时标记这个 [stateless] 和 [stateful]? 因为我想了解这两种情况的差异 【参考方案1】:

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

【讨论】:

好吧,我看到了区别,但在这两种情况下,我都会有 1 个序列,它有 1000 个时间步,不是吗?因为在无状态情况下,我唯一的样本或序列有 1000 个时间步长,而在有状态情况下,LSTM 会将我的 1000 个序列中的 1 个时间步长视为 1 个序列,对吗? 无状态 LSTM 不存在。如果你没有状态,那么它只是一个普通的神经网络。对于“有状态”的情况,情况有所不同,因为使用 1000 个时间步长的 1 个序列,您可以处理 1000 个具有不同参数的不同单元格,而对于 1000 个序列,您只通过 1 个单元格。想象你的 LSTM 网络就像一个隧道。在第一种情况下,隧道很长,您只经过一次。在另一种情况下,隧道很短,你要穿过它 1000 次。 作为无状态案例,我理解这意味着 return_state=False,这是 keras 中的标准设置。我忘了提到我的意思是多对一的情况,但我很清楚它是如何工作的,但我真的无法用语言表达。因此,在第一种情况下,当 retun_state = True 时,就像我将短隧道连接到一个长隧道一样,对吗?所以状态将被传递给每个批次 刚刚检查了文档,看来您是对的,stateful=True 表示您保留每批的最终状态并将其作为下一批的初始状态传递。所以是的,在这种情况下,如果您有 1 批 1000 个样品或 1000 批 1 个样品,这可能是相同的 好的,如果你能更新你的答案,我可以把它标记为正确:)

以上是关于keras lstm 区别 stateless 和 stateful的主要内容,如果未能解决你的问题,请参考以下文章

Keras:LSTM dropout 和 LSTM 循环 dropout 的区别

有人可以向我解释初始化 keras lstm 层中传递的激活参数和循环激活参数之间的区别吗?

Keras中的LSTM

Keras生成器和序列的区别

keras中双向LSTM流程的验证

使用Keras与LSTM和RNN进行斗争