当前位置:   article > 正文

时间序列预测17:CNN-LSTM 实现用电量/发电量预测

cnn-lstm

【时间序列预测/分类】 全系列60篇由浅入深的博文汇总:传送门


接上文,本文介绍了CNN-LSTM模型实现单、多变量多时间步预测的家庭用电量预测任务。



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
  • 3
  • 4
  • 5

1.2 完整代码

完整代码以单变量多步预测演示,要想修改多变量,只需要修改sliding_window()forecast() 函数即可,可以参考上一篇文章:

推荐阅读
相关标签