接上文,本文介绍了CNN-LSTM模型实现单、多变量多时间步预测的家庭用电量预测任务。
文章目录1. CNN-LSTM1.1 CNN 模型1.2 完整代码 1. CNN-LSTM 1.1 CNN 模型卷积神经网络(CNN)可用作编码器-解码器结构中的编码器。 CNN不直接支持序列输入;相反,一维CNN能够读取序列输入并自动学习显着特征。然后可以由LSTM解码器解释这些内容。CNN和LSTM的混合模型称为CNN-LSTM模型,在编码器-解码器结构中一起使用。CNN希望输入的数据具有与LSTM模型相同的3D结构,尽管将多个特征作为不同的通道读取,但效果相同。
为简化示例,重点放在具有单变量输入的CNN-LSTM上,但是可以很容易地对其进行更新以使用多变量输入,这是一项练习。和以前一样,使用14天的每日总功耗输入序列。编码器为一个简单有效的CNN模型,由两个卷积层和一个最大池化层组成,然后将其结果平坦化。
第一层卷积读取输入序列,并将结果投影到特征图上。第二层卷积在第一层创建的特征图上执行相同的操作,尝试放大其显著特征。每个卷积层使用64个特征图(filters=64
),并以3个时间步长的内核大小(kernel_size=3
)读取输入序列。最大池化层降采样成原来特征图尺寸的1/4来简化特征图。然后将提取的特征图展平为一个长向量,将其用作解码过程的输入。代码实现:
model.add(Conv1D(filters=64, kernel_size=3, activation='relu',
input_shape=(n_timesteps,n_features)))
model.add(Conv1D(filters=64, kernel_size=3, activation='relu'))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
1.2 完整代码
完整代码以单变量多步预测演示,要想修改多变量,只需要修改sliding_window()
和 forecast()
函数即可,可以参考上一篇文章: