写在前面
本文是对The 5 Step Life-Cycle for Long Short-Term Memory Models in Keras的复现与解读,新手博主,边学边记,以便后续温习,或者对他人有所帮助
概述
深度学习神经网络在 Python 中很容易使用 Keras 创建和评估,但您必须遵循严格的模型生命周期。
在这篇文章中,您将了解创建、训练和评估Keras中长期记忆(LSTM)循环神经网络的分步生命周期,以及如何使用训练有素的模型进行预测。
阅读这篇文章后,您将知道:
- 如何定义、编译、拟合和评估 Keras 中的 LSTM;
- 如何为回归和分类序列预测问题选择标准默认值。;
- 如何将所有连接在一起,在 Keras 开发和运行您的第一个 LSTM 循环神经网络。
可以参考Long Short-Term Memory Networks With Python,包含了所有示例的教程以及Python源代码文件
环境
本教程假定您安装了 Python SciPy 环境。此示例可以使用 Python 2 或 3。
本教程假定您已使用 TensorFlow 或 Theano 后端安装了 Keras v2.0 或更高版本。
本教程还假定您安装了scikit-learn、pandas、NumPy 和 Matplotlib。
接下来,让我们来看看一个标准时间序列预测问题,我们可以用作此实验的上下文。
1、定义网络
第一步是定义您的网络。
神经网络在 Keras 中定义为一系列图层。这些图层的容器是顺序类。
第一步是创建顺序类的实例。然后,您可以创建图层,并按应连接它们的顺序添加它们。由内存单元组成的LSTM循环层称为LSTM()。通常跟随 LSTM 图层并用于输出预测的完全连接层称为 Dense()。
例如,我们可以通过两个步骤完成操作:
model = Sequential()
model.add(LSTM(2))
model.add(Dense(1))
但是,我们也可以通过创建层数组并传递到序列的构造函数来一步完成。
layers = [LSTM(2), Dense(1)]
model = Sequential(layers)
网络中的第一层必须定义预期输入数。输入必须是三维的,由Samples、Timesteps和Features组成。
Samples:数据中的行
Timesteps:特征的过去观测值
features:数据中的列
假设数据作为 NumPy 数组加载,您可以使用 NumPy 中的 reshape()函数将 2D 数据集转换为 3D 数据集。如果希望列成为一个特征的时间步长,可以使用:
data = data.reshape((data.shape[0], data.shape[1], 1))
如果希望 2D 数据中的列通过一个时间步成为特征,可以使用:
data = data.reshape((data.shape[0], 1, data.shape[1]))
您可以指定input_shape,该参数需要包含时间步长数和特征数的元组。例如,如果我们有两个时间步长和一个特征的单变量时间序列与两个滞后观测值每行,它将指定如下:
model = Sequential()
model.add(LSTM(5, in