长短期记忆(LSTM)系列_LSTM的数据准备(1)——如何重塑Keras中长短期内存网络的输入数据
源码地址:
LSTM输入层
LSTM输入层由网络的第一个隐藏层上的“ input_shape ”参数指定。
这会让初学者感到困惑。
例如,下面是具有一个隐藏的LSTM层和一个密集输出层的网络的示例。
model = Sequential()
model.add(LSTM(32))
model.add(Dense(1))
每个LSTM层的输入必须是三维的。在此示例中,LSTM()层必须指定输入的形状。
这个输入的三个维度是:
- 样品。一个序列是一个样本。批次由一个或多个样品组成。
- 时间步骤。一个步骤是样品中的一个观察点。
- 特征。一个特征是在一个时间步骤的一个观察。
这意味着输入层在拟合模型和进行预测时需要3D数据数组,即使数组的特定维度包含单个值,例如一个样本或一个特征。
定义LSTM网络的输入层时,网络假定您有一个或多个样本,并要求您指定时间步数和要素数。您可以通过为“ input_shape ”参数指定元组来完成此操作。
例如,下面的模型定义了一个输入层,该输入层需要1个或更多样本,50个时间步长和2个特征。
model = Sequential()
model.add(LSTM(32, input_shape=(50, 2)))
model.add(Dense(1))
现在我们知道了如何定义LSTM输入层以及3D输入的期望,让我们看看如何为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)
将所有这些放在一起,下面列出了完整的示例。
[code]from numpy import array # 将这个数字序列定义为NumPy数组 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个特征(列) data = data.reshape((1, 10, 1)) print(data.shape) print(data)
1 |
(1, 10, 1) [[[0.1] [0.2] [0.3] [0.4] [0.5] [0.6] [0.7] [0.8] [0.9] [1. ]]] |
运行该示例将打印单个样本的新3D形状。
此数据现在可以用作LSTM的输入(X),其input_shape为(10,1)。
model = Sequential()
model.add(LSTM(32, input_shape=(10, 1)))
model.add(Dense(1))
具有多个输入功能的LSTM示例
考虑您有多个并行系列作为模型输入的情况。
例如,这可能是两个并行的10个值系列:
1 2 |
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]])
它可以重新整形为3D数组,如下所示:该数据可以被构造为1个样本,具有10个时间步长和2个特征。
data = data.reshape(1, 10, 2)
将所有这些放在一起,下面列出了完整的示例。
[code]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个特征 data = data.reshape(1, 10, 2) print(data.shape) print(data)
运行该示例将打印单个样本的新3D形状。
1 |
(1, 10, 2) [[[0.1 1. ] [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.1]]] |
此数据现在可以用作LSTM的输入(X),其input_shape为(10,2)。
model = Sequential()
model.add(LSTM(32, input_shape=(10, 2)))
model.add(Dense(1))
- 长短期记忆(LSTM)系列_LSTM的数据准备(5)——如何配置Keras中截断反向传播预测的输入序列步长
- 长短期记忆(LSTM)系列_LSTM的数据准备(4)——如何归一化标准化长短期记忆网络的数据
- 长短期记忆(LSTM)系列_LSTM的数据准备(3)——如何使用差分法消除数据的趋势和季节性
- 长短期记忆(LSTM)系列_LSTM的特性学习(2)——如何用stateful配置有状态的LSTM网络 代码示例
- 长短期记忆(LSTM)系列_LSTM的数据准备(7)——总结(完结)
- 长短期记忆(LSTM)系列_LSTM的特性学习(3)——如何构建“序列 —>序列”(多对多)的LSTM网络模型
- 长短期记忆(LSTM)网络预测系列(python)_大结局(内含学习目录)
- 如何为LSTM重新构建输入数据(Keras)
- 如何在长短期记忆(LSTM)网络中利用TimeDistributed层---python语言
- 深度学习系列教程 - 1.2.1 如何将待预测数据输入到神经网络中
- 长短期记忆(LSTM)系列_LSTM的特性学习(1)——LSTM中如何使用TimeDistributed包装层
- 理解长短期记忆网络(LSTM NetWorks)
- 递归神经网络之理解长短期记忆网络(LSTM NetWorks)(转载)
- TensorFlow人工智能引擎入门教程之九 RNN/LSTM循环神经网络长短期记忆网络使用
- 1、lib7z-Memory从内存或网络解压数据(编译源码、前期准备)
- Java多线程环境下如何高效安全处理数据(输入输出流、文件、网络等)(一)
- TensorFlow人工智能入门教程之十一 最强网络DLSTM 双向长短期记忆网络(阿里小AI实现)
- 小白都理解的人工智能系列(5)—— 长短期循环神经网络LSTM RNN NO4
- 深度学习笔记(八)LSTM长短期记忆网络
- keras中实现3D卷积(Con3D)以及如何将输入数据转化为3D卷积的输入(后者附实现代码)