你可能很难理解如何为LSTM模型的输入准备序列数据。你可能经常会对如何定义LSTM模型的输入层感到困惑。也可能对如何将数字的1D或2D矩阵序列数据转换为LSTM输入层所需的3D格式存在一些困惑。
在本教程中,你将了解如何定义LSTM模型的输入层,以及如何重新调整LSTM模型加载的输入数据。
完成本教程后,你将知道:
让我们开始吧。
本教程分为四个部分;它们是:
1 .LSTM输入层
2.单个输入样本的LSTM的示例
3 .具有多个输入特性的LSTM的示例
4.LSTM输入的提示
LSTM输入层是由网络上第一个隐藏层的“input_shape”参数指定的。
这会让初学者感到困惑。例如,下面是一个包含一个隐藏的LSTM层和密集输出层的网络示例。
model= Sequential()
model.add(LSTM(32))
model.add(Dense(1))
在本例中,LSTM()层必须指定输入的形状。每一个LSTM层的输入必须是三维的。
输入的三个维度是:
这意味着,输入层在拟合模型和预测时期望得到一个三维数据数组,即使数组的特定维度包含一个单一值,例如一个样本或一个特性。
当定义LSTM网络的输入层时,LSTM网络假设你有1个或更多的样本,并要求你指定时间步骤的数量和特性的数量。你可以通过为“input_shape”输入参数指定一个元组来实现这一点。
例如,下面的模型定义了一个输入层,它期望一个或多个样本、50个时间步骤和两个特性。
model= Sequential()
model.add(LSTM(32, input_shape=(50,2)))
model.add(Dense(1))
现在我们已经知道了如何定义LSTM输入层和3D输入的期望,让我们来看看为LSTM准备数据的示例。
考虑你有多个时间步骤和一个特性序列的情况。
例如,这可能是10个值的序列:
0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0
我们可以将这个数字序列定义为一个NumPy数组。
from numpyimport 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 numpyimport 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))
考虑你有多个并行系列作为模型输入的情况。
例如,可以是两个平行的10个值:
series1:0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0
series2:1.0,0.9,0.8,0.7,0.6,0.5,0.4,0.3,0.2,0.1
我们可以将这些数据定义为10行2列的矩阵:
from numpyimport 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]])
这个数据可以被框定为一个包含10个时间步骤和2个特征的样本。
它可以被重新调整为3D数组:
data= data.reshape(1,10,2)
把所有这些放在一起,完整的示例如下所示。
from numpyimport 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,1)的LSTM的输入(X)。
model= Sequential()
model.add(LSTM(32, input_shape=(10,2)))
model.add(Dense(1))
本节列出了一些提示,帮助你为LSTMs准备输入数据。
如果你正在深入研究,本节将提供有关主题的更多资源。
在本教程中,你了解了如何定义LSTMs的输入层,以及如何将序列数据重新调整为LSTMs的输入。
具体来说,你学会了:
如何定义一个LSTM输入层。
如何重新调整LSTM模型的一维序列数据和定义输入层。
如何重新调整LSTM模型的多个平行序列数据并定义输入层。