美文网首页数据蛙数据分析每周作业
keras中关于输入尺寸、LSTM的stateful问题

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

作者: Great_smile | 来源:发表于2019-01-29 18:26 被阅读5次

最近在学习使用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问题

    本文链接:https://www.haomeiwen.com/subject/tlxfsqtx.html