如何为LSTM重新构建输入数据(Keras)

2017 年 10 月 13 日 全球人工智能

“全球人工智能”拥有十多万AI产业用户,10000多名AI技术专家。主要来自:北大,清华,中科院,麻省理工,卡内基梅隆,斯坦福,哈佛,牛津,剑桥...以及谷歌,腾讯,百度,脸谱,微软,阿里,海康威视,英伟达......等全球名校和名企。


——免费加入AI技术专家社群>>

——免费加入AI高管投资者群>>

——申请成为AI高校推广大使>>

摘要: 对于初入门的开发人员,如何为LSTM准备数据一直是一个问题。在为LSTM准备数据的过程中的确有很多需要注意的问题,阅读本文可能会帮助你解决更多的问题。


对于初入门的开发人员来说,这可能是非常困难的事情为LSTM模型准备序列数据。通常入门的开发者会在有关如何定义LSTM模型的输入层这件事情上感到困惑。还有关于如何将可能是1D2D数字矩阵的序列数据转换可以输入到LSTM输入层所需的3D格式的困难。

在本文中,你将了解如何将输入层定义为LSTM模型,以及如何重新构建可以输入到LSTM模型的输入数据。

看完本文后,你将知道:

如何定义LSTM的输入层。

如何重塑LSTM模型的一维序列数据并定义输入层。

如何重塑LSTM模型的多并行系列数据并定义输入层。

教程概述

本文分为4部分:

1.LSTM输入层。

2.具有单输入样本的LSTM示例。

3.具有多个输入特征的LSTM示例。

4.LSTM输入提示。

LSTM输入层


LSTM输入层是由神经网络第一个隐藏层上的“ input_shape ”参数指定的。这可能会让初学者感到困惑。例如,以下是具有一个隐藏的LSTM层和一个密集输出层组成的神经网络示例。


model = Sequential()model.add(LSTM(32))model.add(Dense(1))


在这个例子中,我们可以看到LSTM()层必须指定输入的形状。而且每个LSTM层的输入必须是三维的。这输入的三个维度是:

样品。一个序列是一个样本。批次由一个或多个样本组成。

时间步。一个时间步代表样本中的一个观察点。

特征。一个特征是在一个时间步长的观察得到的。

这意味着输入层在拟合模型时以及在做出预测时,对数据的要求必须是3D数组,即使数组的特定维度仅包含单个值。

当定义LSTM网络的输入层时,网络假设你有一个或多个样本,并会给你指定时间步长和特征数量。你可以通过修改“ input_shape ”的参数修改时间步长和特征数量。例如,下面的模型定义了包含一个或多个样本,50个时间步长和2个特征的输入层。


model = Sequential()
model.add(LSTM(32, input_shape=(50, 2)))
model.add(Dense(1))


现在我们知道如何定义LSTM输入层,接下来我们来看一些我们如何为LSTM准备数据的例子。

具有单输入样本的LSTM示例

考虑到你可能会有多个时间步骤和一个特征序列的情况,所以我们先从这种情况讲起。例如,这是一个包含10个数字的序列:

0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0

我们可以将这个数字序列定义为NumPy数组。


from numpy import array
data = array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0])


然后,我们可以使用NumPy数组中的reshape()函数将这个一维数组重构为三维数组,每个时间步长为1个样本,那么我们需要10个时间步长和1个特征。

在数组上调用的reshape()函数需要一个参数,它是定义数组新形状的元组。我们不能干涉数据的重塑,重塑必须均匀地重组数组中的数据。


data = data.reshape((1, 10, 1))


一旦重塑,我们可以打印阵列的新形状。

print(data.shape)


完整的例子如下:

from numpy import array
data = array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0])
data = data.reshape((1, 10, 1))
print(data.shape)


运行示例打印单个样本的新3D形状:


(1, 10, 1)

该数据现在可以为input_shape101)的LSTM的输入(X)。

model = Sequential()
model.add(LSTM(32, input_shape=(10, 1)))
model.add(Dense(1))

具有多个输入功能的LSTM示例

你的模型可能有多个并行数据作为输入的情况,接下来我们来看看这种情况。

例如,这可以是两个并行的10个值:

series 1: 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0

series 2: 1.0, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1

我们可以将这些数据定义为具有10行的2列的矩阵:

from numpy import array
data = array([
	[0.1, 1.0],	[0.2, 0.9],	[0.3, 0.8],	[0.4, 0.7],	[0.5, 0.6],	[0.6, 0.5],	[0.7, 0.4],	[0.8, 0.3],	[0.9, 0.2],	[1.0, 0.1]])


该数据可以被设置为1个样本,具有10个时间步长和2个特征。

它可以重新整形为3D阵列,如下所示:

data = data.reshape(1, 10, 2)


完整的例子如下:

from numpy import array
data = array([
	[0.1, 1.0],
	[0.2, 0.9],
	[0.3, 0.8],
	[0.4, 0.7],
	[0.5, 0.6],
	[0.6, 0.5],
	[0.7, 0.4],
	[0.8, 0.3],
	[0.9, 0.2],
	[1.0, 0.1]])
data = data.reshape(1, 10, 2)
print(data.shape)


运行示例打印单个样本的新3D形状。


(1, 10, 2)


该数据现在可以为input_shape10,2)作为LSTM的输入(X)使用。

model = Sequential()
model.add(LSTM(32, input_shape=(10, 2)))
model.add(Dense(1))


LSTM输入提示

接下来我列出了在为LSTM准备输入数据时可以帮助你的一些提示。

1.LSTM输入层必须是3D

2.3个输入尺寸的含义是:样本,时间步长和特征。

3.LSTM输入层由第一个隐藏层上的input_shape参数定义。

4.所述input_shape参数是限定的时间的步骤和特征数量的两个值的元组。

5.样本数默认假定为大于1

6.NumPy数组中的reshape()函数可用于将你的1D2D数据重塑为3D

7.reshape()函数会将一个元组作为新定义的形状的参数。

进一步阅读

如果你进一步了解,本部分将提供有关该主题的更多资源。

Recurrent Layers Keras API。

Numpy reshape()函数API

如何将时间序列转换为Python中的监督学习问题

时间序列预测作为监督学习。

系统学习,进入全球人工智能学院

热门文章推荐

未来 3~5 年内,哪个方向的机器学习人才最紧缺?

中科院步态识别技术:不看脸 50米内在人群中认出你!

厉害|黄仁勋狂怼CPU:摩尔定律已死 未来属于GPU!

干货|7步让你从零开始掌握Python机器学习!

华裔女科学家钱璐璐,发明仅20纳米的DNA机器人!

Geoffrey Hinton提出capsule 概念,推翻反向传播!

2017年7大最受欢迎的AI编程语言:Python第一!

重磅|中国首家人工智能技术学院在京揭牌开学!

厉害 | 南京大学周志华教授当选欧洲科学院外籍院士!

5个月市值涨了1200亿,首次突破3100亿市值!

登录查看更多
6

相关内容

长短期记忆网络(LSTM)是一种用于深度学习领域的人工回归神经网络(RNN)结构。与标准的前馈神经网络不同,LSTM具有反馈连接。它不仅可以处理单个数据点(如图像),还可以处理整个数据序列(如语音或视频)。例如,LSTM适用于未分段、连接的手写识别、语音识别、网络流量或IDSs(入侵检测系统)中的异常检测等任务。
一份简明有趣的Python学习教程,42页pdf
专知会员服务
76+阅读 · 2020年6月22日
一份循环神经网络RNNs简明教程,37页ppt
专知会员服务
172+阅读 · 2020年5月6日
【模型泛化教程】标签平滑与Keras, TensorFlow,和深度学习
专知会员服务
20+阅读 · 2019年12月31日
金融时序预测中的深度学习方法:2005到2019
专知会员服务
166+阅读 · 2019年12月4日
初学者的 Keras:实现卷积神经网络
Python程序员
24+阅读 · 2019年9月8日
使用LSTM模型预测股价基于Keras
量化投资与机器学习
34+阅读 · 2018年11月17日
基于LSTM深层神经网络的时间序列预测
论智
21+阅读 · 2018年9月4日
基于 Keras 用 LSTM 网络做时间序列预测
R语言中文社区
21+阅读 · 2018年8月6日
深度学习基础之LSTM
全球人工智能
28+阅读 · 2017年12月18日
新手|TensorFlow实现神经网络入门篇!
全球人工智能
9+阅读 · 2017年11月17日
教程 | 基于Keras的LSTM多变量时间序列预测
机器之心
20+阅读 · 2017年10月30日
用Python实现CNN长短期记忆网络!
全球人工智能
9+阅读 · 2017年8月22日
Arxiv
12+阅读 · 2019年3月14日
Star-Transformer
Arxiv
5+阅读 · 2019年2月28日
Arxiv
3+阅读 · 2018年5月11日
Arxiv
5+阅读 · 2018年5月5日
Arxiv
5+阅读 · 2018年1月16日
VIP会员
相关资讯
初学者的 Keras:实现卷积神经网络
Python程序员
24+阅读 · 2019年9月8日
使用LSTM模型预测股价基于Keras
量化投资与机器学习
34+阅读 · 2018年11月17日
基于LSTM深层神经网络的时间序列预测
论智
21+阅读 · 2018年9月4日
基于 Keras 用 LSTM 网络做时间序列预测
R语言中文社区
21+阅读 · 2018年8月6日
深度学习基础之LSTM
全球人工智能
28+阅读 · 2017年12月18日
新手|TensorFlow实现神经网络入门篇!
全球人工智能
9+阅读 · 2017年11月17日
教程 | 基于Keras的LSTM多变量时间序列预测
机器之心
20+阅读 · 2017年10月30日
用Python实现CNN长短期记忆网络!
全球人工智能
9+阅读 · 2017年8月22日
Top
微信扫码咨询专知VIP会员