在Keras的文档中,stateful
和unroll
都被设置为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)
如果我理解正确的话,这是否意味着,对于时间序列分析,最好设置unroll=True
?
回答:
既不展开也不保存状态。
请记住,Keras中的”stateful”仅表示”连续的两个批次将被解释为同一序列的两部分”。仅此而已。(批次2是批次1的续集)
所有的LSTM当然都有状态(不可能没有状态)。
小心使用”初始化LSTM”这个表达。stateful=False
的层会在每个批次”重置状态”。实际结果是:”每个批次是一组从头到尾的独立序列”。(批次2不是批次1的续集)
“状态”是关于”序列至当前步骤的历史信息”。它们与”权重”完全不同,权重是层从所有序列中实际学到的内容。
“展开”是一种将循环计算转换为单一无循环图的方法。它仅适用于短序列,以牺牲更多内存为代价获得更快的处理速度。