飞道的博客

多维时序 | MATLAB实现CNN-GRU多变量时间序列预测

456人阅读  评论(0)

多维时序 | MATLAB实现CNN-GRU多变量时间序列预测

基本介绍

本次运行测试环境MATLAB2020b,MATLAB实现CNN-GRU多变量时间序列预测,卷积门控循环单元。

模型特点

  • CNN和GRU网络是深度学习中两种常见的网络。与浅层学习相比,深度学习能够实现数据的逐层转换,保证了最有效的特征表达和信息提取。
  • CNN对输入数据进行逐层卷积和池化操作。卷积层是CNN 的核心,它利用局部连接和权值共享对输入进行卷积操作,提取数据的深层特征。
  • 池化层通过一定的池化规则对卷积层的输出执行池化操作,保留主要特征,同时减少参数数目和计算量,防止过拟合。
  • CNN 的特点是能够提取数据中的隐藏特征,并将其逐层结合,生成抽象的高层特征。然而,CNN不具备记忆功能,缺乏对时序数据时间相关性的考虑。
  • RNN在学习长期依赖关系时存在梯度消失和爆炸等常见问题,为了解决这一问题,Hochreiter 等人提出了LSTM神经网络,其引入了3 个“选通单元”:输入门、遗忘门和输出门。Cho 等人将LSTM神经网络的输入门和遗忘门合并为更新门,构建了更易于计算和实现的GRU神经网络。
  • GRU 神经网络是一种时间递归神经网络,能够充分反映时间序列数据的长期历史过程。GRU神经网络在处理后续输入数据时,可以将先前输入所携带的信息保存在网络中。

程序设计

%  CONV -> ReLU -> MAXPOOL -> FC -> DROPOUT -> FC -> SOFTMAX 
layers = [ ...
    sequenceInputLayer(inputSize)
    convolution1dLayer(5,100,'Padding',2,'Stride', 1) % 卷积层 1
    batchNormalizationLayer;
    reluLayer();  % ReLU 层 1
    convolution1dLayer(5,70,'Padding',2,'Stride', 1);  % 卷积层 2
    batchNormalizationLayer;
    maxPooling1dLayer(1,'Stride',1); % 最大池化 池化层 1
    convolution1dLayer(3,50,'Padding',1,'Stride', 1);  % 卷积层 3
    reluLayer(); % ReLU 层 3
    maxPooling1dLayer(1,'Stride',1); 
    convolution1dLayer(3,40,'Padding',1,'Stride', 1);  % 卷积层 4
    reluLayer(); % ReLU 层 2
    maxPooling1dLayer(1,'Stride',1); % 最大池化 池化层 1
    fullyConnectedLayer(1,'Name','fc1')
    
    regressionLayer]

options = trainingOptions('adam',... 
    'InitialLearnRate',1e-3,...% 学习率
    'MiniBatchSize', batchSize, ...
    'MaxEpochs',numEpochs);

[net,info1] = trainNetwork(input_train,output_train,layers,options);

 
  • 相关预测



学习总结

CNN-GRU 模型中需要手动设置的参数主要包括卷积层层数、卷积核个数、GRU层层数、GRU层神经元个数和优化学习算法。卷积层层数和卷积核个数体现了CNN从数据中提取特征的能力,GRU层层数和GRU层神经元个数则反映了GRU神经网络从数据中学习时间依赖关系的能力。

参考资料

[1] https://blog.csdn.net/kjm13182345320/article/details/127515229?spm=1001.2014.3001.5502
[2] https://blog.csdn.net/kjm13182345320/article/details/127993418?spm=1001.2014.3001.5502


转载:https://blog.csdn.net/kjm13182345320/article/details/128011037
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场