Keras 的默认 LSTM 是展开的还是有状态的?

Yi *_*hen 1 machine-learning deep-learning lstm keras recurrent-neural-network

在 Keras 文档中, 和statefulunroll设置为False。那么如果这两者都不是的话,Keras 中的循环是如何完成的呢? Keras RNN 文档

我检查了Keras中RNN的源代码,似乎默认操作是在每个时间步初始化LSTM。我累了吗?

       if initial_state is not None:
            pass
       elif self.stateful:
            initial_state = self.states
       else:
            initial_state = self.get_initial_state(inputs)
Run Code Online (Sandbox Code Playgroud)

如果我是正确的,是否意味着对于时间序列分析,设置 会更好unroll=True

Dan*_*ler 5

既不是展开的也不是有状态的。

请记住,Keras 中的“有状态”仅意味着“两个连续批次将被解释为同一序列的两个部分”。没有其他的。(第2批是第1批的续集)

当然,所有 LSTM 都有状态(不可能没有状态)。

请小心“初始化 LSTM”这一表达方式。图层stateful=False将为每个批次“重置状态”。实际结果是:“每个批次从开始到结束都是一组单独的序列”。(第 2 批不是第 1 批的续集)

“状态”是有关“直到当前步骤的序列的历史记录”的信息。它们与“权重”完全不同,“权重”是该层实际上从所有序列中学到的东西。

“展开”是一种将循环计算转换为单个图而无需循环的方法。它仅适用于短序列,它可以以使用更多内存为代价获得更快的处理速度。