美文网首页数据蛙数据分析每周作业
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