⛄一、CNN-GRU数据预测

1 理论基础
1.1 CNN算法

负荷序列数据为一维数据,用一维卷积核对数据进行卷积处理,以获取数据的特征。
现设定卷积核的维度为3,移动步长为1,对输入数据进行卷积,以获得特征图图谱,即:

式中:yj为第j个位置的特征值输出;xj为第j个位置的数据值;uj为第j个位置的卷积核值。

1.2 GRU算法
将经过卷积之后产生的特征序列作为GRU的输入。GRU由LSTM发展而来,LSTM是RNN的变体。RNN网络通过对输入信号的循环保证了信号的持续存在。LSTM是由RNN网络改进而来,在RNN的基础上加入了记忆单元和门机制,有效地解决了长序列训练中存在的梯度消失和梯度爆炸问题。

LSTM用输入门、遗忘门和输出门3个门函数来控制输入值、遗忘值和输出值。GRU网络较LSTM网络有所简化,GRU网络由新门和重置门两个门函数构成,其结构如图1所示。

图1 GRU的网络结构图
zt为更新门,用来决定上一层隐藏层状态中有多少信息传递到当前的隐藏状态ht中,经过sigmoid函数将结果映射到0~1之间,即:

rt为重置门,决定上一时刻隐藏层状态有多少信息需要被遗忘,经过sigmoid函数将结果映射到0~1之间,越接近1信息越容易被保留,即:

确定当前的记忆内容,将重置门rt与ht–1进行Hadamard乘积决定当前的记忆内容中要遗忘多少上一时刻的隐藏层的内容,然后与新的输入数据结合放入tanh激活函数中,即:

最后确定当前隐藏层保留的信息,通过zt和1–zt确定哪些历史数据和当前数据需要更新,即:

2 预测结果及分析
2.1 CNN-GRU预测模型建立

1)获取数据。本文选取某地区商业生活、工业生产的总负荷数据作为实验数据。在电网上搭建负荷采集设备,每h采集一次。研究发现在气象因素中温度对负荷的影响最大。由于其他气象因素获取困难、不易量化,在数据集中加入最高温度、最低温度、平均温度结合负荷数据构成测试样本;

2)数据处理。获得的数据中除含有负荷值外,还有最高温度、最低温度、平均温度等温度数据。由于现场采集情况复杂,数据中有许多空值数据,在进行模型训练之前需要对数据进行清洗并进行归一化处理。将数据分为训练数据和测试数据;

3)搭建CNN-GRU网络模型,对模型进行训练。首先将处理后的数据放入CNN网络中,进行卷积和池化操作,提取数据新的特征。然后将经过卷积处理之后的数据放入RNN网络中,由于输入数据为一维时间序列,因此使用一维卷积层。在卷积层中,卷积步长设为1,使用RELU函数作为激活函数。将归一化后的训练集数据输入搭建好的CNN-GRU网络中进行训练;

4)模型评价。将测试集数据输入到训练好的CNN-GRU网络中,以均方根误差(root mean square error,RMSE)和平均相对误差(mean absolute percent error,MAPE)作为准确度评价指标对训练好的模型进行评价。

式中:n为预测点个数;ai为第i个预测点的电力负荷预测值;bi为第i个预测点的电力负荷真实值。MAPE值和RMSE值越小,预测准确率越高。

⛄二、部分源代码

%% CNN-GRU时间序列预测
%% 输入参数
clc;
clear;
close all
clearvars
% 时间滞后阶数;
Lag = 1:8;
% 训练集比例
ratio = 0.9;
% 批处理样本
MiniBatchSize =24;
% 最大迭代次数
MaxEpochs = 60;
% 学习率
learningrate = 0.005;
%% 加载数据
load data;
data = [data{:}];
%% 在训练和测试中划分顺序
% 在训练和测试中拆分数据。
% 90%的数据用于训练,而10%的数据用于测试。
numStepsTraining = round(ratio*numel(data));
indexTrain = 1:numStepsTraining;
dataTrain = data(indexTrain );
indexTest = numStepsTraining+1:size(data,2);
dataTest = data(indexTest);
%% 数据标准化还是数据规范化
% 为了改善收敛过程,建议对数据进行标准化或规范化。
mu = mean(dataTrain);
sig = std(dataTrain);
TrainStandardizeddata = (dataTrain - mu) / sig;
TestStandardizeddata = (dataTest - mu) / sig;
% 训练数据矩阵变换
XTrain = lagmatrix(TrainStandardizeddata,Lag);
XTrain = XTrain(max(Lag)+1:end,:)';
YTrain = TrainStandardizeddata(max(Lag)+1:end);
% 创建一维列元胞或向量,长度为滞后训练集大小;
XrTrain = cell(size(XTrain,2),1);
YrTrain = zeros(size(YTrain,2),1);
for i=1:size(XTrain,2)
XrTrain{i,1} = XTrain(:,i);
YrTrain(i,1) = YTrain(:,i);
end

% 测试数据矩阵变换
XTest = lagmatrix(TestStandardizeddata,Lag);
XTest = XTest(max(Lag)+1:end,:)';
YTest = TestStandardizeddata(max(Lag)+1:end);
XrTest = cell(size(XTest,2),1);
YrTest = zeros(size(YTest,2),1);
for i=1:size(XTest,2)
XrTest{i,1} = XTest(:,i);
YrTest(i,1) = YTest(:,i);
end
%% 创建混合CNN-GRU网络架构
% 输入特征维度
numFeatures = size(XTrain,1);
% 输出特征维度
numResponses = 1;
FiltZise = 10;
% 创建"CNN-GRU"模型
layers = […
% 输入特征
sequenceInputLayer([numFeatures 1 1],‘Name’,‘input’)
sequenceFoldingLayer(‘Name’,‘fold’)
% CNN特征提取
convolution2dLayer(FiltZise,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’)
dropoutLayer(0.25,‘Name’,‘drop1’)
% GRU输出
gruLayer(32,‘OutputMode’,“last”,‘Name’,‘bil4’,‘RecurrentWeightsInitializer’,‘He’,‘InputWeightsInitializer’,‘He’)
dropoutLayer(0.25,‘Name’,‘drop2’)
% 全连接层
fullyConnectedLayer(numResponses,‘Name’,‘fc’)
regressionLayer(‘Name’,‘output’) ];

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

%% 训练选项
if gpuDeviceCount>0
mydevice = ‘gpu’;
else
mydevice = ‘cpu’;
end
options = trainingOptions(‘adam’, …
‘MaxEpochs’,MaxEpochs, …
‘MiniBatchSize’,MiniBatchSize, …
‘GradientThreshold’,1, …
‘InitialLearnRate’,learningrate, …
‘LearnRateSchedule’,‘piecewise’, …
‘LearnRateDropPeriod’,56, …
‘LearnRateDropFactor’,0.25, …
‘L2Regularization’,1e-3,…
‘GradientDecayFactor’,0.95,…
‘Verbose’,false, …
‘Shuffle’,“every-epoch”,…
‘ExecutionEnvironment’,mydevice,…
‘Plots’,‘training-progress’);
%% 模型训练
rng(0);
net = trainNetwork(XrTrain,YrTrain,layers,options);

%% 测试数据预测
% 测试集预测
YPred = predict(net,XrTest,“ExecutionEnvironment”,mydevice,“MiniBatchSize”,numFeatures);
YPred = YPred’;
% 数据反归一化
YPred = sig.*YPred + mu;
YTest = sig.*YTest + mu;

⛄三、运行结果



⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]张立峰,刘旭.基于CNN-GRU神经网络的短期负荷预测[J].电力科学与工程. 2020,36(11)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

【GRU时序预测】基于matlab卷积神经网络结合门控循环单元CNN-GRU时间序列预测【含Matlab源码 2287期】相关推荐

  1. 现代循环神经网络-1.门控循环单元(GRU)【动手学深度学习v2】

    文章目录 1.门控循环单元(GRU) 1.1 门控隐状态 A.重置门与更新门 B.候选隐状态 C.隐状态 1.2 GRU的实现 A.从零实现 B.简洁实现 1.门控循环单元(GRU) GRU是一个比较 ...

  2. (pytorch-深度学习)门控循环单元(GRU)

    门控循环单元(GRU) 循环神经网络中的梯度计算 当时间步数较大或者时间步较小时,循环神经网络的梯度较容易出现衰减或爆炸. 虽然裁剪梯度可以应对梯度爆炸,但无法解决梯度衰减的问题. 通常由于这个原因, ...

  3. 【Matlab语音隐写】DCT+DWT音频数字水印嵌入提取【含GUI源码 836期】

    一.代码运行视频(哔哩哔哩) [Matlab语音隐写]DCT+DWT音频数字水印嵌入提取[含GUI源码 836期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1 ...

  4. 门控循环单元网络(GRU)在自然语言处理中的应用

    作者:禅与计算机程序设计艺术 1.简介 自然语言处理(NLP)是人类认知的一项重要技能,它涉及到对文本数据进行处理.提取信息并对其做出回应.传统上,文本分析方法使用基于统计模式的算法,如TF-IDF. ...

  5. pytorch学习笔记(三十一):门控循环单元(GRU)

    文章目录 前言 1. 门控循环单元 1.1 重置门和更新门 1.2 候选隐藏状态 1.3 隐藏状态 2. 读取数据集 3. 从零开始实现 3.1 初始化模型参数 3.2 定义模型 3.3 训练模型并创 ...

  6. 门控循环单元网络GRU详解

    为了改善循环神经网络的长程依赖问题,在 梯度消失是循环网络的主要问题除了使用一些优化技巧外更有效的方式就是改变模型比如让U = I同时令 ∂ht/∂ht= I 为单位矩阵即ht = ht−1 + g( ...

  7. 现代循环神经网络 - 门控循环单元

    文章目录 门控循环单元(GRU) 1 - 门控隐状态 重置门和更新门 候选隐状态 隐状态 2 - 从零开始实现 初始化模型参数 定义模型 训练与预测 3 - 简洁实现 4 - 小结 门控循环单元(GR ...

  8. 回归预测 | MATLAB实现WOA-GRU鲸鱼算法优化门控循环单元多输入单输出回归预测

    回归预测 | MATLAB实现WOA-GRU鲸鱼算法优化门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现WOA-GRU鲸鱼算法优化门控循环单元多输入单输出回归预测 写在前面 效果 ...

  9. 动手学深度学习(三十九)——门控循环单元GRU

    文章目录 门控循环单元(GRU) 一.门控隐藏状态 1.1 重置门和更新门 1.2候选隐藏状态 1.3 隐藏状态 二.从零实现GRU 2.1 初始化模型参数 2.2 定义模型 2.3 训练与预测 2. ...

最新文章

  1. PowerDesiger 15逆向生成工程E-R图及导出word表格
  2. 在Global Object Services (GOS) 中加入自定义项目
  3. 1011 A+B 和 C (15 分)(c语言)
  4. Java 在指定目录中创建文件
  5. 1.3编程基础之算术表达式与顺序执行 12 计算球的体积
  6. 计算机编程ebcdic码,EBCDIC 与 ASCII 编码相互转换
  7. 关于ckeditor的配置
  8. image加载图片 ui unity_【Unity游戏客户端框架搭建】四、资源管理之理论篇
  9. vue组件(Vue+webpack项目实战系列之三)
  10. SpringMVC学习(五)处理前端的请求参数及数据回显
  11. 软件开发过程与项目管理(9.软件项目配置管理计划)
  12. python 判断区分字符串是否都是英文/中文
  13. Fuse内核死锁导致的Android系统死机问题分析
  14. vue实现拖拽的组件
  15. 设计模式(三):“花瓶+鲜花”中的装饰者模式(Decorator Pattern)
  16. 一加手机怎么导出照片_一加5t怎么才能把手机相片上传到电脑上?
  17. 注意stm32定时器的倍频器
  18. 锁相放大器基础结构原理介绍
  19. SpringBoot(WebSocket聊天室)
  20. VS和VScode的区别是什么?

热门文章

  1. mysqlclient Windows 下安装报错解决方法
  2. ngrok搭建+阿里云SSL证书+低成本搭建微信小程序本地调试环境
  3. asp网站开发--实例(收藏)
  4. 了解面部识别的不同算法
  5. 群晖NAS教程(二十)、利用Docker安装zdir搭建个人云盘
  6. 微信扫码提示在浏览器中打开的遮罩代码解决方式
  7. GNSS观测方程及线性组合(全)
  8. 285个地级市空间权重矩阵(空间邻接、地理距离、经济距离、经济地理嵌套矩阵)
  9. 中文版SM3255AB/SM3257AA优盘量产工具v11.10.13.01
  10. java后端怎么入门,自学还是培训