keras 何时重置 LSTM 状态?
When does keras reset an LSTM state?
我阅读了各种关于它的文章,none 似乎回答了这个非常基本的问题。总是模棱两可:
在 stateful = False
LSTM 层中,keras 是否在以下时间后重置状态:
- 每个序列;或
- 每批?
假设我将 X_train 的形状设置为 (1000,20,1),这意味着 1000 个序列的 20 个单值序列。如果我做:
model.fit(X_train, y_train, batch_size=200, nb_epoch=15)
是否会为每个序列重置状态(重置状态 1000 次)?
或者它会为每个批次重置状态(重置状态 5 次)?
在 doc of the RNN code 你可以阅读这个:
Note on using statefulness in RNNs :
You can set RNN layers to be 'stateful', which means that the states
computed for the samples in one batch will be reused as initial states
for the samples in the next batch. This assumes a one-to-one mapping
between samples in different successive batches.
我知道这并不能直接回答您的问题,但对我来说它证实了我的想法:当 LSTM 不是有状态的时,状态会在每次采样后重置。它们不分批工作,分批的想法是每个样本彼此独立。
因此您的示例有 1000 次状态重置。
在 Keras 中有两种维护状态的模式:
1) 默认模式 (stateful = False)
状态在每批后重置。据我所知,批次内的不同样本之间仍将保持状态。因此,对于您的示例状态,每个时期将重置 5 次。
2) 永远不会重置状态的有状态模式。在新纪元之前重置状态取决于用户,但 Keras 本身不会重置状态。在这种模式下,状态从一个批次的样本 "i" 传播到下一个批次的样本 "i"。通常建议在每个时期后重置状态,因为状态可能会增长太久并变得不稳定。然而,根据我对小规模数据集(20,000-40,000 个样本)的经验,在一个纪元之后重置或不重置状态对最终结果没有太大影响。对于更大的数据集,它可能会有所不同。
如果您的模式跨越 100 多个时间步长,则有状态模型将很有用。否则默认模式就足够了。根据我的经验,将批量大小设置为大致等于数据中模式的大小(时间步长)也有帮助。
状态设置一开始可能很难掌握。人们会期望状态在一个批次的最后一个样本到下一个批次的第一个样本之间转移。但是状态实际上是在相同编号的样本之间跨批次传播的。作者有两个选择,他们选择了后者。阅读有关有状态 RNN 的 here. Also look at the relevant Keras FAQ 部分
扩展@Nassim_Ben的回答,确实每个序列对于批处理的每个实例都被认为是独立的。但是,您需要记住,RNN 的隐藏状态和单元内存会传递到下一个单元 20 个步骤。对于 20 个单元格中的第一个单元格,隐藏状态和单元格内存通常设置为零。
在第 20 个单元之后,在隐藏状态(仅不是单元内存)传递到 RNN 之上的层之后,状态被重置。我假设它们在这里指的是单元内存和隐藏状态。
所以是的,所有 1000 个实例都会重置,但是,考虑到您的 batch_size=200
,它会重置 5 次,每批在完成这 20 个步骤的信息传递后都会重置。希望你能解决这个问题。
Here's 我做的一个项目,我有同样的问题。请特别注意单元格 15 及其在 blob after 单元格 11 中的解释。我一直在附加字母,因为否则状态将被重置。
通过一些测试,我得出了以下结论,这是根据文档和 Nassim 的回答得出的:
首先,层中没有单一状态,批次中每个样本都有一个状态。在这样的层中有 batch_size
个并行状态。
有状态=假
在 stateful=False
情况下,所有 状态在每个批处理后一起重置 。
具有10 sequences
的批次将创建10 states
,并且所有10个状态在处理后自动重置。
下一批 10 sequences
将创建 10 new states
,也将在处理此批后重置
如果所有这些序列都有length (timesteps) = 7
,这两个批次的实际结果是:
20 individual sequences, each with length 7
None 个序列是相关的。但是当然:权重(不是状态)对于层来说是唯一的,并且将代表层从所有序列中学到的东西。
- 状态是:我现在在序列中的什么位置?它是哪个时间步?这个特定序列从开始到现在表现如何?
- 权重是:我对目前所见的所有序列的一般行为了解多少?
有状态=真
在这种情况下,也有相同数量的并行状态,但它们将根本不会被重置。
具有 10 sequences
的批次将创建 10 states
,它们将在批次结束时保持原样。
下一批 10 sequences
(必须是 10,因为第一个是 10)将 重复使用 相同的 10 states
之前创建的。
实际结果是:第二批的10个sequence只是在延续第一批的10个sequence,就好像没有中断过一样。
如果每个序列都有length (timesteps) = 7
,那么实际的意思就是:
10 individual sequences, each with length 14
当你看到你达到了序列的总长度,然后你调用model.reset_states()
,这意味着你将不再继续之前的序列,现在你将开始提供新的序列。
大家似乎都把它搞得太糊涂了。 Keras LSTM 在每批次后重置状态。
阅读此博客中的 LSTM State Within A Batch
和 Stateful LSTM for a One-Char to One-Char Mapping
个主题。它显示了为什么它必须仅在批处理后重置它。
我阅读了各种关于它的文章,none 似乎回答了这个非常基本的问题。总是模棱两可:
在 stateful = False
LSTM 层中,keras 是否在以下时间后重置状态:
- 每个序列;或
- 每批?
假设我将 X_train 的形状设置为 (1000,20,1),这意味着 1000 个序列的 20 个单值序列。如果我做:
model.fit(X_train, y_train, batch_size=200, nb_epoch=15)
是否会为每个序列重置状态(重置状态 1000 次)?
或者它会为每个批次重置状态(重置状态 5 次)?
在 doc of the RNN code 你可以阅读这个:
Note on using statefulness in RNNs :
You can set RNN layers to be 'stateful', which means that the states computed for the samples in one batch will be reused as initial states for the samples in the next batch. This assumes a one-to-one mapping between samples in different successive batches.
我知道这并不能直接回答您的问题,但对我来说它证实了我的想法:当 LSTM 不是有状态的时,状态会在每次采样后重置。它们不分批工作,分批的想法是每个样本彼此独立。
因此您的示例有 1000 次状态重置。
在 Keras 中有两种维护状态的模式:
1) 默认模式 (stateful = False)
状态在每批后重置。据我所知,批次内的不同样本之间仍将保持状态。因此,对于您的示例状态,每个时期将重置 5 次。
2) 永远不会重置状态的有状态模式。在新纪元之前重置状态取决于用户,但 Keras 本身不会重置状态。在这种模式下,状态从一个批次的样本 "i" 传播到下一个批次的样本 "i"。通常建议在每个时期后重置状态,因为状态可能会增长太久并变得不稳定。然而,根据我对小规模数据集(20,000-40,000 个样本)的经验,在一个纪元之后重置或不重置状态对最终结果没有太大影响。对于更大的数据集,它可能会有所不同。
如果您的模式跨越 100 多个时间步长,则有状态模型将很有用。否则默认模式就足够了。根据我的经验,将批量大小设置为大致等于数据中模式的大小(时间步长)也有帮助。
状态设置一开始可能很难掌握。人们会期望状态在一个批次的最后一个样本到下一个批次的第一个样本之间转移。但是状态实际上是在相同编号的样本之间跨批次传播的。作者有两个选择,他们选择了后者。阅读有关有状态 RNN 的 here. Also look at the relevant Keras FAQ 部分
扩展@Nassim_Ben的回答,确实每个序列对于批处理的每个实例都被认为是独立的。但是,您需要记住,RNN 的隐藏状态和单元内存会传递到下一个单元 20 个步骤。对于 20 个单元格中的第一个单元格,隐藏状态和单元格内存通常设置为零。
在第 20 个单元之后,在隐藏状态(仅不是单元内存)传递到 RNN 之上的层之后,状态被重置。我假设它们在这里指的是单元内存和隐藏状态。
所以是的,所有 1000 个实例都会重置,但是,考虑到您的 batch_size=200
,它会重置 5 次,每批在完成这 20 个步骤的信息传递后都会重置。希望你能解决这个问题。
Here's 我做的一个项目,我有同样的问题。请特别注意单元格 15 及其在 blob after 单元格 11 中的解释。我一直在附加字母,因为否则状态将被重置。
通过一些测试,我得出了以下结论,这是根据文档和 Nassim 的回答得出的:
首先,层中没有单一状态,批次中每个样本都有一个状态。在这样的层中有 batch_size
个并行状态。
有状态=假
在 stateful=False
情况下,所有 状态在每个批处理后一起重置 。
具有
10 sequences
的批次将创建10 states
,并且所有10个状态在处理后自动重置。下一批
10 sequences
将创建10 new states
,也将在处理此批后重置
如果所有这些序列都有length (timesteps) = 7
,这两个批次的实际结果是:
20 individual sequences, each with length 7
None 个序列是相关的。但是当然:权重(不是状态)对于层来说是唯一的,并且将代表层从所有序列中学到的东西。
- 状态是:我现在在序列中的什么位置?它是哪个时间步?这个特定序列从开始到现在表现如何?
- 权重是:我对目前所见的所有序列的一般行为了解多少?
有状态=真
在这种情况下,也有相同数量的并行状态,但它们将根本不会被重置。
具有
10 sequences
的批次将创建10 states
,它们将在批次结束时保持原样。下一批
10 sequences
(必须是 10,因为第一个是 10)将 重复使用 相同的10 states
之前创建的。
实际结果是:第二批的10个sequence只是在延续第一批的10个sequence,就好像没有中断过一样。
如果每个序列都有length (timesteps) = 7
,那么实际的意思就是:
10 individual sequences, each with length 14
当你看到你达到了序列的总长度,然后你调用model.reset_states()
,这意味着你将不再继续之前的序列,现在你将开始提供新的序列。
大家似乎都把它搞得太糊涂了。 Keras LSTM 在每批次后重置状态。
阅读此博客中的 LSTM State Within A Batch
和 Stateful LSTM for a One-Char to One-Char Mapping
个主题。它显示了为什么它必须仅在批处理后重置它。