回归预测|回归预测 | MATLAB实现CNN-LSTM(卷积长短期记忆神经网络)多输入单输出

回归预测 | MATLAB实现CNN-LSTM(卷积长短期记忆神经网络)多输入单输出 【回归预测|回归预测 | MATLAB实现CNN-LSTM(卷积长短期记忆神经网络)多输入单输出】
目录

    • 回归预测 | MATLAB实现CNN-LSTM(卷积长短期记忆神经网络)多输入单输出
      • 基本介绍
      • 模型背景
      • CNN-LSTM模型
        • CNN模型
        • LSTM模型
        • CNN-LSTM模型
      • 数据下载
      • 程序设计
      • 参考资料
      • 致谢

基本介绍
本次运行测试环境MATLAB2020b
  • 总体而言,CNN用作特征(融合)提取,然后将输出的feature映射为序列向量输入到LSTM当中。
  • 针对现有预测模型不能充分提取交通流时空特征的问题,提出一种基于卷积神经网络(convolutional neural network, CNN)和长短时记(long short-term memory,LSTM)神经网络的短时交通流预测方法。
  • 首先,采用分层提取方法使设计的网络结构和一维卷积核函数自动提取序列的空间特征;其次,优化LSTM网络模块来减少网络对数据的长时间依赖;最后,在端对端模型的训练过程中,引入Adam优化算法,加快权重的拟合并提高网络输出的准确性和鲁棒性。
模型背景
众多国内外研究人员主要集中在序列的特征提取、预测模型建立等关键技术领域开展研究,其中预测模型按预测方法可分为3类:基于参数的预测、基于浅层机器学习的预测、基于深度学习的预测。
  • 基于参数的预测方法的典型代表是差分整合移动平均自回归模型(autoregressive integrated moving average model, ARIMA。ARIMA 最早于1970 年提出,其模型结构相对简单,在早期受到广泛重视。
  • 基于浅层机器学习的预测方法主要包括支持向量回归(support vector regression, SVR)、K 近邻模型等。SVR 预测模型遇到高维数据时,处理速度相对较为缓慢且计算成本相对较高,输出存在延迟。
  • 基于深度学习的预测方法主要包括长短时记忆神经网络(long short-term memory, LSTM)、门控循环单元神经网络(gated recurrent unit, GRU)和堆栈式 自编码器神经网络(stacked auto-encoders, SAEs)等。
  • 深度学习模型已成为当前的研究热点,广泛应用于序列预测领域。但在实际应用中,基于深度学习的预测方法也存在一些问题。采用LSTM 模型预测短时序列,仿真结果表明:LSTM 网络本身无法捕获数据的空间特征,必须人工将空间信息编码作为网络的输入,从而影响了预测精度。另外,在训练预测模型的过程中,序列存在的时空特征会引发模型的自适应学习率方差较大的问题,进一步影响到预测模型的精度。因此,如何充分提取序列时空特征的问题是基于深度学习预测模型亟待解决的问题。
  • 为了充分提取序列的时空特征,提供准确、及时的近期信息,本文提出了一种以卷积神经网络(convolutional neural network, CNN)和LSTM网络为结构基础的短时预测方法。通过使用多层CNN网络提取交通流量的空间特征,并运用多层LSTM 网络捕捉序列的时间依赖特征,并结合Adam优化算法机制进行模型的优化训练。主要工作如下:
    1)为解决序列的空间特征提取问题,提出了CNN 网络分层提取方法使设计的网络结构和一维卷积核函数自动提取序列的空间特征,达到了对序列空间特征自动提取的目的;
    2)为充分提取序列的时间依赖特征,提出了利用多层LSTM 网络模块来减少网络对数据的长时间依赖,达到提高预测精度的目的;
    3)将Adam 优化算法应用于模型训练以提升预测模型的整体运行效率。
CNN-LSTM模型
CNN模型
  • 卷积神经网络(Convolutional Neural Networks,简称 CNN)是一类特殊的人工神经网络,区别于神经网络其他模型(如,BP神经网络,RNN神经网络等),其最主要的特点是卷积运算操作(Convolutional operators)。因此,CNN 在诸多领域应用特别是图像相关任务上表现优异,诸如,图像分类,图像语义分割,图像检索,物体检测等计算机视觉问题。
  • 卷积神经网络适合处理空间数据,一维卷积神经网络也被称为时间延迟神经网络(time delay neural network),可以用来处理一维数据。 CNN的设计思想受到了视觉神经科学的启发,主要由卷积层(convolutional layer) 和池化层(pooling layer)组成。卷积层能够保持图像的空间连续性,能将图像的局部特征提取出来。池化层可以采用最大池化(max-pooling)或平均池化(mean-pooling),池化层能降低中间隐含层的维度,减少接下来各层的运算量,并提供了旋转不变性。
  • CNN提供了视觉数据的分层表示,CNN每一层的权重实际上学到了图像的某些成分,越高层,成分越具体。CNN将原始信号经过逐层的处理,依次识别出部分到整体。比如说人脸识别,CNN先是识别出点、边、颜色、拐角,再是眼角、嘴唇、鼻子,再是整张脸。CNN同一卷积层内权值共享,都为卷积核的权重。
  • CNN 网络是一种前馈式神经网络。Abdeljaber 等研究表明,一维-CNN 能够提取时间序列的相应特征。本文数据属于时间序列。因此,本文前,处理部分将一维CNN 网络应用于数据流的空间特征提取。
卷积层 输入数据序列,利用卷积操作生成特征矩阵。
利用卷积操作生成特征向量并输入到LSTM 网络。
回归预测|回归预测 | MATLAB实现CNN-LSTM(卷积长短期记忆神经网络)多输入单输出
文章图片

LSTM模型
  • 循环神经网络(Recurrent Neural Networks,RNN),适合处理时序数据,在语音处理、自然语言处理领域应用广泛,人类的语音和语言天生具有时序性。但是,原始的循环神经网络存在梯度消失或梯度爆炸问题,无论利用过去多长的时间的信息,例如当激活函数是Sigmoid函数时,其导数是个小于1的数,多个小于1的导数连乘就会导致梯度消失问题。LSTM,分层RNN都是针对这个问题的解决方案。 本文主要介绍的是长短时记忆网络(Long short-term Memory,LSTM)。
  • 长短时记忆网络(Long short-term Memory,LSTM)用LSTM单元代替RNN中的神经元,在输入、输出、忘记过去信息上分别加入了输入门、输出门、遗忘门来控制允许多少信息通过。
LSTM 模型是时间循环神经网络中的一种,LSTM 是在传统的循环神经网络(recurrentneural network, RNN)基础上引入输入门、遗忘门、输入门,解决了RNN 网络存在的长期依赖问题。
本文将从CNN 网络中获得到的特征向量输入到LSTM 网络中,具体处理步骤如下:
  • 通过sigmoid 函数计算遗忘信息;
  • 在单元状态中存储的信息量,可以通过一个输入门决定更新的信息
  • 通过将遗忘门与输入门进行结合,计算出新的单元状态。
  • 在新的单元状态基础上计算出输出结果,将基于tanh 压缩过后的输出和基于sigmoid 门的输出相乘,最终得到预测序列。
    回归预测|回归预测 | MATLAB实现CNN-LSTM(卷积长短期记忆神经网络)多输入单输出
    文章图片
CNN-LSTM模型
本文提出利用Adam 优化算法增强CNN-LSTM 预测模型的鲁棒性及收敛性,在减少模型训练时间的同时,降低所提出模型的预测误差,最终得到不错的预测精度。CNN-LSTM 模型处理步骤如下:
  • 首先将输入的历史交通流数据构造为包含交通流时空相关性特征矩阵。
    回归预测|回归预测 | MATLAB实现CNN-LSTM(卷积长短期记忆神经网络)多输入单输出
    文章图片
  • 将特征矩阵X 输入到多层CNN 中,提取出交通流数据的空间特征,得到序列特征向量。
  • 将特征向量输入到多层LSTM 网络中提取时间依赖特征。
在完成模型网络结构的搭建之后,为防止数据过拟合及训练收敛时间较长,引入Dropout 层并选择Adam 优化算法应用于模型的训练过程。 提出模型的内部结构如下:
回归预测|回归预测 | MATLAB实现CNN-LSTM(卷积长短期记忆神经网络)多输入单输出
文章图片

数据下载
  • 下载地址:
  • https://mianbaoduo.com/o/bread/mbd-YZ2ak5pt
程序设计
  • 数据导入
%% CNN-LSTM多变量回归预测 %% 加载数据与数据集划分 clc; clear; close all data = https://www.it610.com/article/xlsread('data.xlsx', 'Sheet1', 'A3:M1250'); % 输入数据 input =data(:,1:12)'; output=data(:,13)'; nwhole =size(data,1); % 打乱数据集 % temp=randperm(nwhole); % 不打乱数据集 temp=1:nwhole; train_ratio=0.9; ntrain=round(nwhole*train_ratio); ntest =nwhole-ntrain; % 准备输入和输出训练数据 input_train =input(:,temp(1:ntrain)); output_train=output(:,temp(1:ntrain)); % 准备测试数据 input_test =input(:, temp(ntrain+1:ntrain+ntest)); output_test=output(:,temp(ntrain+1:ntrain+ntest));

  • CNN-LSTM网络参数
% 批处理样本 MiniBatchSize =24; % 最大迭代次数 MaxEpochs = 60; % 学习率 learningrate = 0.005; % 一些参数调整 if gpuDeviceCount>0 mydevice = 'gpu'; else mydevice = 'cpu'; end options = trainingOptions( 'adam', ... 'MaxEpochs',100, ... 'GradientThreshold',1, ... 'InitialLearnRate',learningrate, ... 'LearnRateSchedule','piecewise', ... 'LearnRateDropPeriod',20, ... 'LearnRateDropFactor',0.8, ... 'L2Regularization',1e-3,... 'Verbose',false, ... 'ExecutionEnvironment',mydevice,... 'Plots','training-progress');

  • 完整程序下载:
  • https://mianbaoduo.com/o/bread/mbd-YZ2ak5pt
  • 运行效果展示:
  • https://www.bilibili.com/video/BV1BA411F7QE
参考资料
[1] https://blog.csdn.net/kjm13182345320/article/details/120377303
[2] https://mianbaoduo.com/o/bread/mbd-YZ2ak5pt
[3] https://www.bilibili.com/video/BV1BA411F7Q
致谢
  • 大家的支持是我写作的动力!
  • 感谢大家订阅,感谢,需要加Q-【1153460737】,记得备注!

    推荐阅读