Keras中的stateful LSTM可以说是所有学习者的梦魇,令人混淆的机制,说明不到位的文档,中文资料的匮乏。
通过此文,旨在帮助有困惑的人理解statefulness这一状态。
警告: 永远不要在不熟悉stateful LSTM的情况下使用它
一、参考目录:
二、官方文档简介stateful: Boolean (default False). If True, the last state for each sample at index i in a batch will be used as initial state for the sample of index i in the following batch.
使 RNN 具有状态意味着每批样品的状态将被重新用作下一批样品的初始状态。注意,此处的状态表示的是原论文公式里的c,h,即LSTM特有的一些记忆参数,并非w权重。
当使用有状态 RNN 时,假定:所有的批次都有相同数量的样本
如果 x1 和 x2 是连续批次的样本,则x2[i]是 x1[i] 的后续序列,对于每个 i。
要在 RNN 中使用状态,你需要:通过将 batch_size 参数传递给模型的第一层来显式指定你正在使用的批大小。例如,对于 10 个时间步长的 32 样本的 batch,每个时间步长具有 16 个特征,batch_size = 32。
在 RNN 层中设置 stateful = True。
在调用 fit() 时指定 shuffle = False。
重置累积状态:使用 model.reset_states()来重置模型中所有层的状态
使用layer.re