keras何时重置LSTM状态?

keras何时重置LSTM状态?,keras,lstm,keras-layer,Keras,Lstm,Keras Layer,我读了各种各样的关于它的文章,似乎没有人能回答这个非常基本的问题。它总是模棱两可的: 在stateful=FalseLSTM层中,keras是否在以下情况后重置状态: 每个序列;或 每批 假设X_列的形状为(1000,20,1),表示一个值的20个步骤的1000个序列。如果我提出: model.fit(X_train, y_train, batch_size=200, nb_epoch=15) 它是否会为每个序列重置状态(重置状态1000次)? 或者它会为每个批次重置状态(重置状态5次)?

我读了各种各样的关于它的文章,似乎没有人能回答这个非常基本的问题。它总是模棱两可的:

stateful=False
LSTM层中,keras是否在以下情况后重置状态:

  • 每个序列;或
  • 每批
假设X_列的形状为(1000,20,1),表示一个值的20个步骤的1000个序列。如果我提出:

model.fit(X_train, y_train, batch_size=200, nb_epoch=15)
它是否会为每个序列重置状态(重置状态1000次)?
或者它会为每个批次重置状态(重置状态5次)?

在中,您可以阅读以下内容:

关于在RNN中使用状态的注意事项:

您可以将RNN层设置为“有状态”,这意味着 一批样品的计算结果将作为初始状态重新使用 用于下一批的样品。这假定为一对一映射 在不同连续批次的样品之间

我知道这并不能直接回答您的问题,但对我来说,它证实了我的想法:当LSTM没有状态时,每个样本之后都会重置状态。它们不是分批工作的,分批工作的思想是每个样本都是相互独立的


因此,您的示例中有1000个状态重置。

在Keras中,有两种模式用于维护状态: 1) 默认模式
(stateful=False)
,其中状态在每个批处理后重置。AFAIK该状态仍将在批次内的不同样本之间保持。因此,对于您的示例,状态将在每个历元重置5次

2) 从不重置状态的有状态模式。在新纪元之前,由用户重置状态,但Keras本身不会重置状态。在此模式下,状态从一批的样本“i”传播到下一批的样本“i”。通常,建议在每个历元后重置状态,因为状态可能会增长太长时间并变得不稳定。然而,根据我对小型数据集(20000-40000个样本)的经验,在一个历元后重置或不重置状态对最终结果没有多大影响。对于更大的数据集,这可能会有所不同

如果您有跨越100多个时间步的模式,则有状态模型将非常有用。否则,默认模式就足够了。根据我的经验,将批量大小大致设置为与数据中模式的大小(时间步长)相等也会有所帮助


有状态的设置一开始可能很难掌握。人们期望状态在一批的最后一个样本到下一批的第一个样本之间转移。但状态实际上是在相同编号的样本之间跨批次传播的。作者有两种选择,他们选择了后者。读一下这个。另请看关于有状态RNN的相关章节,其中扩展了@Nassim_Ben的回答,每个序列对于批处理的每个实例都被认为是独立的。但是,您需要记住,RNNs隐藏状态和单元内存会被传递到下一个单元20步。对于20个单元中的第一个单元,隐藏状态和单元内存通常设置为零

在第20个单元之后,并且在隐藏状态(仅,非单元内存)传递到RNN上方的层之后,状态被重置。我假设它们是指细胞记忆和隐藏状态

因此,是的,它确实会对所有1000个实例进行重置,但是,考虑到您的
批大小=200
,它会重置5次,每个批在通过这20个步骤传递信息后都会重置。希望你能理解这一点


我做的一个项目也有同样的问题。请特别注意第15单元及其在第11单元后的blob中的说明。我一直在附加字母,因为状态会被重置。

通过一些测试,我得出以下结论,这是根据文档和Nassim的回答得出的:

首先,层中没有单一的状态,而是批次中每个样本有一个状态。在这样一个层中存在
batch\u size
并行状态

有状态=错误 在
stateful=False
情况下,所有状态在每批之后一起重置

  • 具有
    10个序列
    的批处理将创建
    10个状态
    ,所有10个状态在处理后自动重置

  • 具有
    10个序列的下一批
    将创建
    10个新状态
    ,在处理该批后,这些状态也将重置

如果所有这些序列的
长度(timesteps)=7
,则这两个批次的实际结果为:

20个独立序列,每个序列长度为7

所有序列都不相关。但当然:权重(而不是状态)对于层来说是唯一的,并且将代表层从所有序列中学习到的内容

  • 状态是:我现在在序列中的什么位置?这是哪一个时间步?从一开始到现在,这个特殊的序列表现如何
  • 权重是:到目前为止,我对所有序列的一般行为了解多少
有状态的 在这种情况下,并行状态的数量也相同,但它们根本不会被重置

  • 具有
    10个序列的批将创建
    10个状态
    ,这些状态将保持在批结束时的状态

  • 下一批序列为
    10个
    (要求为10个,因为第一批序列为10个)将重用之前创建的相同
    10个状态

实际结果是:第二批中的10个序列只是第一批中的10个序列的延续,就好像根本没有中断一样

如果每个序列的长度(时间步长)=7,则