【问题标题】:How do stateful bidirectional RNNs work in Keras有状态的双向 RNN 如何在 Keras 中工作
【发布时间】:2017-07-04 09:29:53
【问题描述】:
在 Keras 中,用于 RNN 的 Bidirectional 包装器也支持 stateful=true。我真的不明白这应该如何工作:
在有状态的单向模型中,一个批次的状态会转移到下一个批次。我猜它对双向模型中的前向层的工作方式相同。
但是后向层是从哪里获取状态的呢?如果我正确理解所有内容,它应该在技术上从“下一个”批次中接收它的状态。但显然“下一个”批次还没有计算出来,那么它是如何工作的呢?
【问题讨论】:
标签:
deep-learning
keras
recurrent-neural-network
bidirectional
【解决方案1】:
人们可以通过以下方式考虑Bidirectional 层:
forward = Recurrent(..)(input)
backward = Recurrent(..., reverse_input=True)(input)
output = merge([forward, backward], ...)
所以 - 如您所见 - 您正在失去 时间 方向。您正在从头到尾分析输入。在这种情况下 - 设置 stateful=True 只是根据双向分支的方向从前一个样本中获取其起始状态(forward 取自 forward,backward 取自 backward)。
这使您的模型失去了解释 - 来自并发批次的样本可能被解释为分为多个批次的紧凑序列。