keras中关于输入尺寸、LSTM的stateful问题

补充:return_sequence,return_state都是针对一个时间切片(步长)内的h和c状态,而stateful是针对不同的batch之间的。多层LSTM需要设置return_sequence = True,后面再设置return_sequence=False.
最近在学习使用keras搭建LSTM的时候,遇到了一些不明白的地方。有些搞懂了,有些还没有搞懂。现在记下来,因为很快就会忘记!-_-!。

具体的LSTM的原理,我这里不赘述了。给一些很好的参考链接。
LSTM公认圣经,中文翻译版

1. 输入数据维度

我们知道RNN、LSTM适应于时序数据。我们需要按照构造一定的输入数据形式sequence。
实际上来讲,就相当于一个滑动窗口,不断的向前滑动。一个窗口就成了一个样本batch。
后续有时间,我画个图!
在keras中,RNN、LSTM的输入分为两种:

keras官方文档

1)stateless,无状态设置。
输入为input_shape=(time_steps,input_dim),其中time_steps就是每段sequence的长度,input_dim就是输入数据的维度(特征个数)
2)stateful=True,有设置状态。
输入为batch_input_shape=(batch_size,time_steps,input_dim),其中batch_size就是批量,每批训练的个数。

2. 输入/输出数据尺寸

那如何设置输入数据sequence的长度,和输出的长度呢?这两个长度对于预测的准确性是有影响的。
主要结合数据的周期特性,以及预测任务的需求。具体内容,我还在研究,后续补充
有些文章建议使用贝叶斯优化的方式,确定输入、输出的长度。实际上就是参数搜索的方式了。

3. stateful的设置

RNN/LSTM有个states的状态可以设置,具体states的原理,请参数最开始的LSTM原理链接。
stateful分为stateless和stateful=True。
1)stateless

  • 无状态设置,即在LSTM训练时候,每个批次batch之间,是没有联系的。
  • 在model.fit()拟合的时候,keras默认把数据打乱shuffle,并且每次batch,都会重置states。

2)stateful=True

  • 有状态设置,即在LSTM训练时候,按照batch_size大小,Xi+b的数据的初始状态,会受到Xi的影响。i+b就是数据的批次,b代表batch_size的大小。也就是每个批次之间,是有联系的。
  • 在输出尺寸部分,需要输出batch_size,即batch_input_shape=(batch_size,time_steps,input_dim)
  • 在model.fit()拟合的时候,需要设置shuffle=False。

4. 参考链接

keras中stateful的圣经
keras中stateful的示例
keras中LSTM的stateful中文解释及代码

有些地方写的不清楚,欢迎讨论。另外这个,需要有点LSTM和keras基础,才能理解。

你可能感兴趣的:(keras中关于输入尺寸、LSTM的stateful问题)