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

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

更多深度文章,请关注:https://yq.aliyun.com/cloud


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

ce0b6e9908098ed2a7549567962228006192e65f

在本文中,你将了解如何将输入层定义为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_shape 10 1 )的 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中的监督学习问题

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


如果你在LSTM上有任何问题,可以去原文作者博客与之交流。

本文由本文由北邮@爱可可-爱生活老师推荐,@阿里云云栖社区组织翻译。

文章原标题《How to Reshape Input Data for Long Short-Term Memory Networks in Keras

作者:Jason Brownlee    

作者博客地址:http://machinelearningmastery.com/blog/

译者:袁虎 审阅:主题曲哥哥

文章为简译,更为详细的内容,请查看原文








相关文章
|
机器学习/深度学习 自然语言处理 数据处理
大模型开发:描述长短期记忆网络(LSTM)和它们在序列数据上的应用。
LSTM,一种RNN变体,设计用于解决RNN处理长期依赖的难题。其核心在于门控机制(输入、遗忘、输出门)和长期记忆单元(细胞状态),能有效捕捉序列数据的长期依赖,广泛应用于语言模型、机器翻译等领域。然而,LSTM也存在计算复杂度高、解释性差和数据依赖性强等问题,需要通过优化和增强策略来改进。
416 1
|
机器学习/深度学习 自然语言处理 数据可视化
数据代码分享|PYTHON用NLP自然语言处理LSTM神经网络TWITTER推特灾难文本数据、词云可视化
数据代码分享|PYTHON用NLP自然语言处理LSTM神经网络TWITTER推特灾难文本数据、词云可视化
|
机器学习/深度学习 数据挖掘 网络架构
Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析
Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析
|
21天前
|
机器学习/深度学习 安全 Serverless
【创新未发表】【故障诊断】基于连续小波变换-CNN, ResNet, CNN-SVM, CNN-BiGRU, CNN-LSTM的故障诊断研究【凯斯西储大学数据】(Matlab代码实现)
【创新未发表】【故障诊断】基于连续小波变换-CNN, ResNet, CNN-SVM, CNN-BiGRU, CNN-LSTM的故障诊断研究【凯斯西储大学数据】(Matlab代码实现)
104 0
|
机器学习/深度学习 算法 算法框架/工具
数据分享|PYTHON用KERAS的LSTM神经网络进行时间序列预测天然气价格例子
数据分享|PYTHON用KERAS的LSTM神经网络进行时间序列预测天然气价格例子
|
机器学习/深度学习 算法 数据可视化
m基于PSO-LSTM粒子群优化长短记忆网络的电力负荷数据预测算法matlab仿真
在MATLAB 2022a中,应用PSO优化的LSTM模型提升了电力负荷预测效果。优化前预测波动大,优化后预测更稳定。PSO借鉴群体智能,寻找LSTM超参数(如学习率、隐藏层大小)的最优组合,以最小化误差。LSTM通过门控机制处理序列数据。代码显示了模型训练、预测及误差可视化过程。经过优化,模型性能得到改善。
265 6
|
机器学习/深度学习 算法 计算机视觉
基于CNN卷积神经网络的金融数据预测matlab仿真,带GUI界面,对比BP,RBF,LSTM
这是一个基于MATLAB2022A的金融数据预测仿真项目,采用GUI界面,比较了CNN、BP、RBF和LSTM四种模型。CNN和LSTM作为深度学习技术,擅长序列数据预测,其中LSTM能有效处理长序列。BP网络通过多层非线性变换处理非线性关系,而RBF网络利用径向基函数进行函数拟合和分类。项目展示了不同模型在金融预测领域的应用和优势。
|
机器学习/深度学习 传感器 数据可视化
MATLAB用深度学习长短期记忆 (LSTM) 神经网络对智能手机传感器时间序列数据进行分类
MATLAB用深度学习长短期记忆 (LSTM) 神经网络对智能手机传感器时间序列数据进行分类
MATLAB用深度学习长短期记忆 (LSTM) 神经网络对智能手机传感器时间序列数据进行分类
|
机器学习/深度学习 数据可视化 网络架构
Matlab用深度学习循环神经网络RNN长短期记忆LSTM进行波形时间序列数据预测
Matlab用深度学习循环神经网络RNN长短期记忆LSTM进行波形时间序列数据预测
|
机器学习/深度学习 数据可视化 TensorFlow
【视频】LSTM模型原理及其进行股票收盘价的时间序列预测讲解|附数据代码1
【视频】LSTM模型原理及其进行股票收盘价的时间序列预测讲解|附数据代码

热门文章

最新文章