理解LSTM中的return_sequence和return_state看这里。解释的很详细:
理解LSTM在keras API中参数return_sequences和return_state
推荐英语原文Stateful LSTM in Keras
文中使用三个问题来解释了这个参数:
-
给定了一个长序列(eg 时间序列),然后把它分为一些更小的子序列来构造输入矩阵
X
,LSTM是否能在序列之间找到依赖的关系?除非我们指定使用有状态的LSTM,否则LSTM无法找到序列之间的依赖关系。
但大多数问题都可以通过无状态LSTM来解决,所以确保你真的需要有状态模式,再将
stateful
设为True
。在无状态模式下,长期记忆并不意味着LSTM将记住先前批次的内容,这里的批次指的是
batch
。 -
为什么我们在Keras中区分无状态LSTM和有状态LSTM?
LSTM具有cell,因此根据定义是有状态的(这个指的是隐藏层的状态)。
Fabien Chollet给出了有状态的定义:
stateful:Boolean(默认为False)。 如果为True,则批次中索引i处的每个样本的最后状态将用作后续批次中索引i的样本的初始状态。
换句话说,无论何时训练或测试LSTM,首先必须构建形状为
(nb_samples,时间步长,input_dim)
的输入矩阵X
,其中batch
批量大小除以nb_samples
。例如,如果
nb_samples = 1024
且batch_size = 64
,则表示您的模型将接收64个样本的块,计算每个输出(无论每个样本的时间步数是多少)的平均梯度并传播它以更新参数向量 。默认情况下,Keras在
X
中对样本进行shuffles
(置换),并且 X i X_i X<