首页 > 编程知识 正文

keras lstm维度(keras的lstm函数)

时间:2023-05-06 11:25:03 阅读:96570 作者:1532

对于新手开发者来说,为LSTM模型准备序列数据可能非常困难。通常,初学者对如何定义LSTM模型的输入层感到困惑。如何将可能是1D或2D数字矩阵的序列数据转换为LSTM输入层所需的3D格式也有困难。

在本文中,您将学习如何将输入图层定义为LSTM模型,以及如何重建可以输入到LSTM模型中的输入数据。

看完这篇文章,你会知道:

如何定义LSTM的输入层?

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

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

00-1010

教程概述

1.lstm输入层。

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

3.具有多种输入功能的LSTM示例。

4.LSTM输入提示。

LSTM输入层

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

model=sequential()model . add(LSTM(32))model . add(density(1))在这个例子中,我们可以看到LSTM()层必须指定输入的形状。并且每个LSTM层的输入必须是三维的。输入的三个维度是:

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

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

特色。在一个时间步长中观察到一个特征。

这意味着,当输入图层符合模型并进行预测时,数据必须是3D数组,即使数组的特定维度仅包含单个值。

定义LSTM网络的输入图层时,网络假设您有一个或多个样本,并将为您指定时间步长和要素数量。您可以通过修改“input_shape”的参数来修改时间步长和特征数量。例如,以下模型定义了包含一个或多个样本、50个时间步长和2个要素的输入图层。

模型=顺序()

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

model . add(density(11))现在,我们已经知道了如何定义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数组。

从numpy导入数组

Data=array ([0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0])然后,我们可以使用NumPy array中的refresh()函数将这个一维数组重构为三维数组,每个时间步长是一个样本,所以我们需要10个时间步长和一个特征。

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

data=data . reshold((1,10,1))一旦它被重新整形,我们就可以打印数组的新形状。

打印(data.shape)的完整示例如下:

从numpy导入数组

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

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

打印(数据.形状)运行样本以打印单个样本的新三维形状:

(1,10,1)该数据现在可以是input _ shape (10,1)的LSTM的输入(x)。

模型=顺序()

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

model . add(density(11))是具有多个输入函数的LSTM的一个例子。

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

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

系列1: 0.1、0.2、0.3、0.4、0.5、0.6、0.7、0.8、0.9、1.0

系列2: 1.0、0.9、0.8、0.7、0.6、0.5、0.4、0.3、0.2、0.1

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

从numpy导入数组

数据=数组([

[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_shape(10,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()函数可用于将你的1D或2D数据重塑为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/

译者:ykdc 审阅:主题曲哥哥

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。