Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >6 种用 LSTM 做时间序列预测的模型结构 - Keras 实现

6 种用 LSTM 做时间序列预测的模型结构 - Keras 实现

作者头像
杨熹
发布于 2019-04-07 06:38:16
发布于 2019-04-07 06:38:16
10.4K10
代码可运行
举报
文章被收录于专栏:杨熹的专栏杨熹的专栏
运行总次数:0
代码可运行

LSTM(Long Short Term Memory Network)长短时记忆网络,是一种改进之后的循环神经网络,可以解决 RNN 无法处理长距离的依赖的问题,在时间序列预测问题上面也有广泛的应用。

今天我们根据问题的输入输出模式划分,来看一下几种时间序列问题所对应的 LSTM 模型结构如何实现。


1. Univariate

Univariate 是指:

input 为多个时间步,

output 为一个时间的问题。

数例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
训练集:
X,          y
10, 20, 30      40
20, 30, 40      50
30, 40, 50      60
…


预测输入:
X70, 80, 90

模型的 Keras 代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# define model【Vanilla LSTM】

model = Sequential()
model.add( LSTM(50,  activation='relu',  input_shape = (n_steps, n_features)) )
model.add( Dense(1) )
model.compile(optimizer='adam', loss='mse')

n_steps = 3
n_features = 1

其中:

n_steps 为输入的 X 每次考虑几个时间步

n_features 为每个时间步的序列数

这个是最基本的模型结构,我们后面几种模型会和这个进行比较。


2. Multiple Input

Multiple Input 是指:

input 为多个序列,

output 为一个序列的问题。

数例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
训练集:
X,       y
[[10 15]
 [20 25]
 [30 35]] 65
[[20 25]
 [30 35]
 [40 45]] 85
[[30 35]
 [40 45]
 [50 55]] 105
[[40 45]
 [50 55]
 [60 65]] 125
…


预测输入:
X80,  85
90,  95
100,     105

即数据样式为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
in_seq1: [10, 20, 30, 40, 50, 60, 70, 80, 90]
in_seq2: [15, 25, 35, 45, 55, 65, 75, 85, 95]

out_seq: [in_seq1[i]+in_seq2[i] for i in range(len(in_seq1))]

模型的 Keras 代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# define model【Vanilla LSTM】
model = Sequential()
model.add(LSTM(50, activation='relu', input_shape=(n_steps, n_features)))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')

n_steps = 3
# 此例中 n features = 2,因为输入有两个并行序列
n_features = X.shape[2]    

其中:

n_steps 为输入的 X 每次考虑几个时间步

n_features 此例中 = 2,因为输入有两个并行序列

和 Univariate 相比:

模型的结构代码是一样的,只是在 n_features = X.shape[2],而不是 1.


3. Multiple Parallel

Multiple Parallel 是指:

input 为多个序列,

output 也是多个序列的问题。

数例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
训练集:
X,          y
[[10 15 25]
 [20 25 45]
 [30 35 65]] [40 45 85]
[[20 25 45]
 [30 35 65]
 [40 45 85]] [ 50  55 105]
[[ 30  35  65]
 [ 40  45  85]
 [ 50  55 105]] [ 60  65 125]
[[ 40  45  85]
 [ 50  55 105]
 [ 60  65 125]] [ 70  75 145]
…


预测输入:
X70, 75, 145
80, 85, 165
90, 95, 185

模型的 Keras 代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# define model【Vanilla LSTM】
model = Sequential()
model.add(LSTM(100, activation='relu', return_sequences=True, input_shape=(n_steps, n_features)))
model.add(Dense(n_features))
model.compile(optimizer='adam', loss='mse')

n_steps = 3
# 此例中 n features = 3,因为输入有3个并行序列
n_features = X.shape[2]       

其中:

n_steps 为输入的 X 每次考虑几个时间步

n_features 此例中 = 3,因为输入有 3 个并行序列

和 Univariate 相比:

模型结构的定义中,多了一个 return_sequences=True,即返回的是序列,

输出为 Dense(n_features),而不是 1.


4. Multi-Step

Multi-Step 是指:

input 为多个时间步,

output 也是多个时间步的问题。

数例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
训练集:
X,          y
[10 20 30] [40 50]
[20 30 40] [50 60]
[30 40 50] [60 70]
[40 50 60] [70 80]
…


预测输入:
X[70, 80, 90]

模型的 Keras 代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# define model【Vanilla LSTM】
model = Sequential()
model.add(LSTM(100, activation='relu', return_sequences=True, input_shape=(n_steps_in, n_features)))
model.add(LSTM(100, activation='relu'))
model.add(Dense(n_steps_out))
model.compile(optimizer='adam', loss='mse')

n_steps_in, n_steps_out = 3, 2
n_features = 1     

其中:

n_steps_in 为输入的 X 每次考虑几个时间步

n_steps_out 为输出的 y 每次考虑几个时间步

n_features 为输入有几个序列

和 Univariate 相比:

模型结构的定义中,多了一个 return_sequences=True,即返回的是序列,

而且 input_shape=(n_steps_in, n_features) 中有代表输入时间步数的 n_steps_in

输出为 Dense(n_steps_out),代表输出的 y 每次考虑几个时间步.

当然这个问题还可以用 Encoder-Decoder 结构实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# define model【Encoder-Decoder Model】
model = Sequential()
model.add(LSTM(100, activation='relu', input_shape=(n_steps_in, n_features)))
model.add(RepeatVector(n_steps_out))
model.add(LSTM(100, activation='relu', return_sequences=True))
model.add(TimeDistributed(Dense(1)))
model.compile(optimizer='adam', loss='mse')

5. Multivariate Multi-Step

Multivariate Multi-Step 是指:

input 为多个序列,

output 为多个时间步的问题。

数例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
训练集:
X,          y
[[10 15]
 [20 25]
 [30 35]] [65 
          85]
[[20 25]
 [30 35]
 [40 45]] [ 85
           105]
[[30 35]
 [40 45]
 [50 55]] [105 
         125]
…


预测输入:
X[40 45]
 [50 55]
 [60 65]

模型的 Keras 代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# define model
model = Sequential()
model.add(LSTM(100, activation='relu', return_sequences=True, input_shape=(n_steps_in, n_features)))
model.add(LSTM(100, activation='relu'))
model.add(Dense(n_steps_out))
model.compile(optimizer='adam', loss='mse')

n_steps_in, n_steps_out = 3, 2
# 此例中 n features = 2,因为输入有2个并行序列  
n_features = X.shape[2]        

其中:

n_steps_in 为输入的 X 每次考虑几个时间步

n_steps_out 为输出的 y 每次考虑几个时间步

n_features 为输入有几个序列,此例中 = 2,因为输入有 2 个并行序列

和 Univariate 相比:

模型结构的定义中,多了一个 return_sequences=True,即返回的是序列,

而且 input_shape=(n_steps_in, n_features) 中有代表输入时间步数的 n_steps_in

输出为 Dense(n_steps_out),代表输出的 y 每次考虑几个时间步,

另外 n_features = X.shape[2],而不是 1,

相当于是 Multivariate 和 Multi-Step 的结构组合起来。


6. Multiple Parallel Input & Multi-Step Output

Multiple Parallel Input & Multi-Step Output 是指:

input 为多个序列,

output 也是多个序列 & 多个时间步的问题。

数例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
训练集:
X,          y
[[10 15 25]
 [20 25 45]
 [30 35 65]] [[ 40  45  85]
          [ 50  55 105]]
[[20 25 45]
 [30 35 65]
 [40 45 85]] [[ 50  55 105]
          [ 60  65 125]]
[[ 30  35  65]
 [ 40  45  85]
 [ 50  55 105]] [[ 60  65 125]
             [ 70  75 145]]
…


预测输入:
X[[ 40  45  85]
 [ 50  55 105]
 [ 60  65 125]]

模型的 Keras 代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# define model【Encoder-Decoder model】
model = Sequential()
model.add(LSTM(200, activation='relu', input_shape=(n_steps_in, n_features)))
model.add(RepeatVector(n_steps_out))
model.add(LSTM(200, activation='relu', return_sequences=True))
model.add(TimeDistributed(Dense(n_features)))
model.compile(optimizer='adam', loss='mse')

n_steps_in, n_steps_out = 3, 2
# 此例中 n features = 3,因为输入有3个并行序列   
n_features = X.shape[2]       

其中:

n_steps_in 为输入的 X 每次考虑几个时间步

n_steps_out 为输出的 y 每次考虑几个时间步

n_features 为输入有几个序列

这里我们和 Multi-Step 的 Encoder-Decoder 相比:

二者的模型结构,只是在最后的输出层参数不同,

TimeDistributed(Dense(n_features)) 而不是 Dense(1)


好啦,这几种时间序列的输入输出模式所对应的代码结构就是这样,如果您还有更有趣的,欢迎补充!


大家好!

我是 不会停的蜗牛 Alice,

喜欢人工智能,没事儿写写机器学习干货,

欢迎关注我!


推荐阅读历史技术博文链接汇总

http://www.jianshu.com/p/28f02bb59fe5

也许可以找到你想要的:

入门问题深度学习神经网络自然语言处理

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.03.20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
每种模式是否可加一些解释的具体案例,光看数组表示,还是有些没有理解
每种模式是否可加一些解释的具体案例,光看数组表示,还是有些没有理解
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
深度学习实战:kaggle竞赛:Keras实现双层LSTM进行风暴预测 python+Keras源码
LSTM(长短期记忆网络)是一种特殊的 RNN(循环神经网络),它能够有效地处理长期依赖问题。相比传统的 RNN,LSTM 通过引入门控机制来控制信息的流动,能够保持较长时间范围内的记忆,并防止梯度消失或爆炸的问题。在处理时间序列或语言数据时,LSTM 可以学习序列中的长期依赖关系。
机器学习司猫白
2025/01/21
1680
深度学习实战:kaggle竞赛:Keras实现双层LSTM进行风暴预测 python+Keras源码
基于SARIMA、XGBoost和CNN-LSTM的时间序列预测对比
本文将讨论通过使用假设测试、特征工程、时间序列建模方法等从数据集中获得有形价值的技术。我还将解决不同时间序列模型的数据泄漏和数据准备等问题,并且对常见的三种时间序列预测进行对比测试。
deephub
2023/02/01
1.3K0
使用Keras进行时间序列预测回归问题的LSTM实现
数据 数据来自互联网,这些数据用于预测航空公司的人数,我们使用LSTM网络来解决这个问题 关于此处模型构建,只对keras部分代码做重点的介绍
学到老
2019/01/25
6.8K0
使用Keras进行时间序列预测回归问题的LSTM实现
使用LSTM模型预测多特征变量的时间序列
使用LSTM模型预测多特征变量的时间序列,能够帮助我们在各种实际应用中进行更准确的预测。这些应用包括金融市场预测、气象预报、能源消耗预测等。
Python编程爱好者
2024/07/12
1.3K0
使用LSTM模型预测多特征变量的时间序列
python在Keras中使用LSTM解决序列问题
时间序列预测是指我们必须根据时间相关的输入来预测结果的问题类型。时间序列数据的典型示例是股市数据,其中股价随时间变化。
拓端
2020/09/26
3.7K0
LSTM时间序列预测及网络层搭建[通俗易懂]
最近看到一篇博客,是时间预测问题,数据和代码的原地址在这里, https://www.jianshu.com/p/5d6d5aac4dbd
全栈程序员站长
2022/07/23
1K0
LSTM时间序列预测及网络层搭建[通俗易懂]
时间序列基于监督学习的LSTM模型为什么可以预测股票走势(附完整代码)
疫情期间,在家学习Python,调通了基于监督学习的LSTM神经网络预测模型代码,在一般代码的基础上,做了单步和多步通用版的改进。调通的代码附后,供各位大咖指正。
用户7017302
2020/03/01
3.8K0
lstm多变量时间序列预测(时间序列如何预测)
Now, we are familiar with statistical modelling on time series, but machine learning is all the rage right now, so it is essential to be familiar with some machine learning models as well. We shall start with the most popular model in time series domain − Long Short-term Memory model.
全栈程序员站长
2022/08/01
2.3K0
lstm多变量时间序列预测(时间序列如何预测)
股票预测 lstm(时间序列的预测步骤)
如果对LSTM原理不懂得小伙伴可以看博主下一篇博客,因为博主水平有限,结合其他文章尽量把原理写的清楚些。
全栈程序员站长
2022/08/01
2.3K1
股票预测 lstm(时间序列的预测步骤)
使用PyTorch-LSTM进行单变量时间序列预测的示例教程
时间序列是指在一段时间内发生的任何可量化的度量或事件。尽管这听起来微不足道,但几乎任何东西都可以被认为是时间序列。一个月里你每小时的平均心率,一年里一只股票的日收盘价,一年里某个城市每周发生的交通事故数。在任何一段时间段内记录这些信息都被认为是一个时间序列。对于这些例子中的每一个,都有事件发生的频率(每天、每周、每小时等)和事件发生的时间长度(一个月、一年、一天等)。
数据STUDIO
2023/02/24
2.2K0
使用PyTorch-LSTM进行单变量时间序列预测的示例教程
keras系列︱Sequential与Model模型、keras基本结构功能(一)
中文文档:http://keras-cn.readthedocs.io/en/latest/ 官方文档:https://keras.io/ 文档主要是以keras2.0。
全栈程序员站长
2022/11/03
1.8K0
深入LSTM神经网络的时间序列预测
RNN(循环神经网络)是一种节点定向连接成环的人工神经网络。不同于前馈神经网络,RNN 可以利用内部的记忆来处理任意时序的输入序列,即不仅学习当前时刻的信息,也会依赖之前的序列信息,所以在做语音识别、语言翻译等等有很大的优势。RNN 现在变种很多,常用的如 LSTM、Seq2SeqLSTM,还有其他变种如含有 Attention 机制的 Transformer 模型等等。这些变种原理结构看似很复杂,但其实只要有一定的数学和计算机功底,在学习的时候认认真真搞懂一个,后面的都迎刃而解。
算法进阶
2023/08/28
7980
深入LSTM神经网络的时间序列预测
Keras 学习笔记(三)Keras Sequential 顺序模型
你可以通过将网络层实例的列表传递给 Sequential 的构造器,来创建一个 Sequential 模型:
种花家的奋斗兔
2020/11/12
2.4K0
使用2D卷积技术进行时间序列预测
在这个项目中使用的数据是来自北卡罗来纳州夏洛特分校的全球能源预测竞赛的数据。您可以在这里找到更多信息:http://www.drhongtao.com/gefcom/2017
deephub
2020/09/14
7380
《机器学习实战:基于Scikit-Learn、Keras和TensorFlow》第15章 使用RNN和CNN处理序列
第10章 使用Keras搭建人工神经网络 第11章 训练深度神经网络 第12章 使用TensorFlow自定义模型并训练 第13章 使用TensorFlow加载和预处理数据 第14章 使用卷积神经网络实现深度计算机视觉 第15章 使用RNN和CNN处理序列 [第16章 使用RNN和注意力机制进行自然语言处理] [第17章 使用自编码器和GAN做表征学习和生成式学习] [第18章 强化学习] [第19章 规模化训练和部署TensorFlow模型]
SeanCheney
2019/12/23
1.5K0
神经网络在算法交易上的应用系列——简单时序预测
我们想从零实现只基于深度学习模型的交易系统,对于在研究过程中我们遇到的任何问题(价格预测,交易策略,风险管理)我们都将采用不同类型的人工神经网络(ANNS)来解决,同时也会检验它们在处理这些问题的效果到底如何。
量化投资与机器学习微信公众号
2019/02/26
1.5K0
LSTM原理及Keras中实现
LSTM(Long Short-Term Memory) 即长短期记忆,适合于处理和预测时间序列中间隔和延迟非常长的重要事件。其中的内部机制就是通过四个门调节信息流,了解序列中哪些数据需要保留或丢弃。
Ewdager
2020/07/14
12.8K1
LSTM原理及Keras中实现
LSTM参数计算与TimeDistributed层
本篇主要讲LSTM的参数计算和Keras TimeDistributed层的使用。LSTM的输入格式为:[Simples,Time Steps,Features]
故事尾音
2019/12/18
2.3K0
LSTM参数计算与TimeDistributed层
LSTM模型搭建_LSTM神经网络
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/01
5010
基于LSTM-CNN的人体活动识别
来源:DeepHub IMBA本文约3400字,建议阅读10+分钟本文带你使用移动传感器产生的原始数据来识别人类活动。 人体活动识别(HAR)是一种使用人工智能(AI)从智能手表等活动记录设备产生的原始数据中识别人类活动的方法。当人们执行某种动作时,人们佩戴的传感器(智能手表、手环、专用设备等)就会产生信号。这些收集信息的传感器包括加速度计、陀螺仪和磁力计。人类活动识别有各种各样的应用,从为病人和残疾人提供帮助到像游戏这样严重依赖于分析运动技能的领域。我们可以将这些人类活动识别技术大致分为两类:固定传感器和
数据派THU
2022/08/29
1.5K0
基于LSTM-CNN的人体活动识别
推荐阅读
相关推荐
深度学习实战:kaggle竞赛:Keras实现双层LSTM进行风暴预测 python+Keras源码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档