lstm 输入数据维度_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. 参考链接

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值