有状态 LSTM - 批次之间和批次内的隐藏状态转移 (Keras)
Posted
技术标签:
【中文标题】有状态 LSTM - 批次之间和批次内的隐藏状态转移 (Keras)【英文标题】:Stateful LSTM - Hidden State transfer between and within batches (Keras) 【发布时间】:2018-10-07 20:33:38 【问题描述】:当您的 batch_size > 1 时,隐藏/单元格状态如何从一个批次中转移,以及跨批次转移,我感到很困惑。
我目前的假设是隐藏状态永远不会在一批中从一个系列转移到另一个系列。 IE。当batch_size = 3时,第一项的隐藏状态不会传递给第二项。
接下来,设置 Stateful=True 将意味着第 1 批的第一个元素的隐藏状态被传递给第 2 批的第 1 个元素,依此类推..
这是文档状态:
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.
我一直在努力寻找对此的确认,而且它似乎也不是很直观,因为假设我的数据是连续的并且我已经批量处理了我的数据批量大小为 3,我不明白为什么我会希望第 1 个单元的隐藏状态转移到第 4 个单元,并希望第 2 个单元转移到第 5 个单元,依此类推。
【问题讨论】:
【参考方案1】:是的,它按照您上面的描述工作。
是的,你是对的,从数据流 t[] 的角度来看,这样排序数据可能不是很直观:
Batch1 = [t[0], t[3], t[6]] Batch2 = [t[1], t[4], t[7]] Batch3 = [t[2], t[5], t[8]]但我认为从数据处理的角度来看,这完全有道理。这种数据排序允许您完全并行化/矢量化所有批次的处理。换句话说: [t[0], t[3], t[6]] 可以并行处理,而(顺序)序列 [t[0], t[1], t[2]] 可以是只一个接一个地处理。
【讨论】:
以上是关于有状态 LSTM - 批次之间和批次内的隐藏状态转移 (Keras)的主要内容,如果未能解决你的问题,请参考以下文章