Dan*_*ler 29 lstm keras keras-layer
我读了很多关于它的文章,似乎没有人回答这个非常基本的问题.它总是含糊不清:
在stateful = FalseLSTM层中,keras会在以下情况后重置状态:
假设我的X_train形状为(1000,20,1),意味着单个值的20个步骤的1000个序列.如果我做:
model.fit(X_train, y_train, batch_size=200, nb_epoch=15)
Run Code Online (Sandbox Code Playgroud)
它会重置每个序列的状态(重置状态1000次)吗?
或者它会重置每个批次的状态(重置状态5次)?
Dan*_*ler 43
通过一些测试,我得到了以下结论,这是根据文档和Nassim的答案:
首先,图层中没有单个状态,但批次中每个样本一个状态.batch_size在这样的层中存在并行状态.
在一种stateful=False情况下,所有状态在每批之后一起重置.
10 sequences将创建一个批处理10 states,并且所有10个状态在处理后自动重置.
10 sequences将创建下一批,10 new states也将在处理完该批次后重置
如果所有这些序列都有length (timesteps) = 7,那么这两批的实际结果是:
20个单独的序列,每个序列长度为7
没有序列是相关的.但当然:权重(不是状态)对于图层来说是唯一的,并且将表示图层从所有序列中学到的内容.
在这种情况下,也存在相同数量的并行状态,但它们根本不会被重置.
10 sequences将创建的批处理10 states将保留在批处理结束时.
下一批10 sequences(它必须是10,因为第一批是10)将重复使用10 states之前创建的相同批次.
实际结果是:第二批中的10个序列只是继续第一批的10个序列,就好像根本没有中断一样.
如果每个序列都有length (timesteps) = 7,那么实际意义是:
10个单独的序列,每个序列长度为14
当你看到你达到了序列的总长度时model.reset_states(),你就会调用,这意味着你不再继续前面的序列,现在你将开始提供新的序列.
art*_*mis 10
在 Keras 中,有两种维护状态的模式:1)默认模式(stateful = False),每批后重置状态。AFAIK 状态仍将在批次内的不同样本之间保持。因此,对于您的示例状态将在每个时期重置 5 次。
2) 状态永远不会重置的有状态模式。在新纪元之前重置状态取决于用户,但 Keras 本身不会重置状态。在这种模式下,状态从一个批次的样本“i”传播到下一批的样本“i”。通常建议在每个 epoch 之后重置状态,因为状态可能会增长太久并变得不稳定。但是,根据我对小数据集(20,000-40,000 个样本)的经验,在一个 epoch 之后重置或不重置状态对最终结果没有太大影响。对于更大的数据集,它可能会有所作为。
如果您的模式跨越 100 多个时间步长,则有状态模型将非常有用。否则默认模式就足够了。根据我的经验,将批量大小设置为大致相当于数据中模式的大小(时间步长)也有帮助。
有状态的设置一开始可能很难掌握。人们会期望状态在一批的最后一个样本到下一批的第一个样本之间转移。但是状态实际上是在相同编号的样本之间跨批次传播的。作者有两个选择,他们选择了后者。在此处阅读有关内容。另请参阅有关有状态 RNN的相关Keras FAQ部分