Valina Seq2Seq

本文介绍了如何使用Keras实现Seq2Seq模型,特别是用于时间序列预测,如温度预测。通过Encoder-Decoder结构,将输入序列转化为固定长度向量,Decoder再将其解码为输出序列。文章涵盖了数据处理、模型搭建,包括Encoder和Decoder模型的构建,并提供了核心代码示例。
摘要由CSDN通过智能技术生成

用Keras实现简单Seq2Seq模型

  • 背景
  • 什么是 seq2seq
  • Encoder–Decoder 结构
  • 用Seq2Seq实现时间序列预测

背景

时间序列预测是一个普遍存在的问题。应用范围非常广泛,例如价格预测、天气预报、生物信号预测等等。

本文将利用Keras实现时间序列预测的RNN for encoder-decoder。

对于vanilla RNN以及LSTM和GRU的相关知识,可以从这里了解"Understanding LSTM Networks" by Christopher Olah。

什么是 Seq2Seq

Seq2Seq模型是RNN最重要的一个变种:N vs M(输入与输出序列长度不同)。

Seq2Seq 是一个 Encoder–Decoder 结构的网络,它的输入是一个序列,输出也是一个序列, Encoder 中将一个可变长度的信号序列变为固定长度的向量表达,Decoder 将这个固定长度的向量变成可变长度的目标的信号序列。

这个结构最重要的地方在于输入序列和输出序列的长度是可变的,可以用于翻译,聊天机器人,句法分析,文本摘要等。

many_to_many_resized

Encoder–Decoder 结构

Sutskever团队和Cho团队分别都在2014年发表论文提出这种结构。不同的是Cho团队用的cell是GRU,而Sutskever团队用的是LSTM。

Encoder–Decoder

图中的 Encoder 和 Decoder 都只展示了一层的普通的 LSTMCell。从上面的结构中,我们可以看到,整个模型结构还是比较简单的。
EncoderCell 最后一个时刻的状态 作为 DecoderCell 的初始状态。
然后在 DecoderCell 中,每个时刻的输出将会作为下一个时刻的输入。以此类推,直到 DecoderCell 某个时刻预测输出结束。

用Seq2Seq实现时间序列预测

为了更好地理解Seq2Seq。我将用keras来实现解决一个时间序列预测问题——温度预测。气象数据资料来源于Max-Planck-Institute for Biogeochemistry in Jena, Germany.

在这个数据集中,有14个不同的量(如气温、气压、湿度、风向等)每十分钟记录一次,持续数年。最初的数据可以追溯到2003年,但是我们将数据限制在2009-2016年。这个数据集非常适合数值型时间预测问题。我们将用它来建立一个模型,该模型将最近几天的数据作为输入,并预测未来24小时的气温。

让我们先看一下这个数据集。

import os

data_dir = './data/'
fname = os.path.join(data_dir, 'jena_climate_2009_2016.csv')

f = open(fname)
data = f.read()
f.close()

lines = data.split('\n')
header = lines[0].split(',')
lines = lines[1:]

print(header)
print(len(lines))
['"Date Time"', '"p (mbar)"', '"T (degC)"', '"Tpot (K)"', '"Tdew (degC)"', '"rh (%)"', '"VPmax (mbar)"', '"VPact (mbar)"', '"VPdef (mbar)"', '"sh (g/kg)"', '"H2OC (mmol/mol)"', '"rho (g/m**3)"', '"wv (m/s)"', '"max. wv (m/s)"', '"wd (deg)"']
420551

首先将这420551条数据转成numpy数组

import numpy as np

float_data = np.zeros((len(lines), len(header) - 1))   
for i, line in enu
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值