当前位置:   article > 正文

回归预测 | MATLAB实现CNN-GRU(卷积门控循环单元)多输入单输出

cnn-gru

回归预测 | MATLAB实现CNN-GRU(卷积门控循环单元)多输入单输出

基本介绍

本次运行测试环境MATLAB2020b,总体而言,CNN用作特征(融合)提取,然后将输出的feature映射为序列向量输入到GRU当中。

  • 本文提出了一种基于CNN-GRU 组合神经网络的预测方法。首先,分析影响变压器运行状态的外部环境因素,构建预测特征集,量化外部环境对运行状态的影响;
  • 采用卷积神经网络(Convolutional Neural Network, CNN)深度挖掘特征集与预测量的内在联系,将结果输入到GRU循环神经网络进行训练,得到预测结果。

模型结构

CNN神经网络

CNN 是一种前馈型神经网络,广泛应用于深度学习领域,主要由卷积层、池化层和全连接层组成,输入特征向量可以为多维向量组,采用局部感知和权值共享的方式。卷积层对原始数据提取特征量,深度挖掘数据的内在联系,池化层能够降低网络复杂度、减少训练参数,全连接层将处理后的数据进行合并,计算分类和回归结果。

GRU门控循环单元

GRU是LSTM的一种改进模型,将遗忘门和输入门集成为单一的更新门,同时混合了神经元状态和隐藏状态,可有效地缓解循环神经网络中“梯度消失”的问题,并能够在保持训练效果的同时减少训练参数,其门控单元结构如图所示。
1

CNN-GRU组合模型

3

CNN 神经网络由1层卷积层与1 层池化层构成,卷积方式选取same 卷积,激活函数选用elu 函数,经过卷积后进行池化,输入到GRU循环神经网络。GRU 循环神经网络对提取到的特征向量进行学习,构建2 层GRU 结构能够达到最好的预测效果,最后将全连接层的输出经过反归一化得最终预测值。在GRU 循环神经网络进行训练时,采用 Adam 算法迭代更新权重,通过动量和自适应学习率不断更新各个神经元的权重和偏差,使得损失函数的输出值达到最优.

程序设计

%  创建"CNN-GRU"模型
    layers = [...
        % 输入特征
        sequenceInputLayer([numFeatures 1 1],'Name','input')
        sequenceFoldingLayer('Name','fold')
        % CNN特征提取
        convolution2dLayer([FiltZise 1],32,'Padding','same','WeightsInitializer','he','Name','conv','DilationFactor',1);
        batchNormalizationLayer('Name','bn')
        eluLayer('Name','elu')
        averagePooling2dLayer(1,'Stride',FiltZise,'Name','pool1')
        % 展开层
        sequenceUnfoldingLayer('Name','unfold')
        % 平滑层
        flattenLayer('Name','flatten')
        % GRU特征学习
        gruLayer(128,'Name','GRU1','RecurrentWeightsInitializer','He','InputWeightsInitializer','He')
        % GRU输出
        gruLayer(32,'OutputMode',"last",'Name','bil4','RecurrentWeightsInitializer','He','InputWeightsInitializer','He')
        dropoutLayer(0.25,'Name','drop3')
        % 全连接层
        fullyConnectedLayer(numResponses,'Name','fc')
        regressionLayer('Name','output')    ];

    layers = layerGraph(layers);
    layers = connectLayers(layers,'fold/miniBatchSize','unfold/miniBatchSize');

%% CNNGRU训练选项
% 批处理样本
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');
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 预测效果
    1
    2
    3

参考资料

[1] 周湶, 孙超, 廖瑞金, 等. 基于云理论的变压器多重故障诊断及短期预测方法[J]. 高电压技术, 2014, 40(5):1453-1460.
[2] YU Zhangting, LI Dajian, JI Shengchang, et al. Research
on transformer fault diagnosis method based on vibration
noise and BP neural network[J]. High Voltage Apparatus,
2020, 56(6): 256-261.

致谢

  • 感谢大家支持!
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/43897?site
推荐阅读
相关标签
  

闽ICP备14008679号