【GRU回归预测】基于matlab卷积神经网络结合门控循环单元CNN-GRU数据预测(多输入单输出)【含Matlab期源码 2274期】

news2024/11/15 22:42:43

⛄一、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

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/97138.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记录那不用百度的美好代码

努力工作,日益消瘦,总有些代码不想记住。我称之为:拿来即用系列 一:格式化时间 1.去除时间的T // 去除日期中T function timeFormatSeconds(time) {if(!time) return time;var date time.substr(0, 10); //年月日var hours ti…

jsp+ssm计算机毕业设计宠物商城【附源码】

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: JSPSSM mybatis Maven等等组成,B/S模式 Mave…

基于SPRINGBOOT的健康饮食管理系统

11-8开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 基于springboot框架,通过对事物健康程度的总结与归纳,进行软件设计,并通过优秀的…

go 语言Http服务器远程执行shell命令

背景 想要在服务器上起一个http服务器,用来远程执行shell命令并且返回。 基础版 package mainimport ("io""log""net/http" )func main() {// Hello world, the web serverhelloHandler : func(w http.ResponseWriter, req *http.R…

性能脚本:用案例和图示帮你理解HTTP协议

当前使用得最为广泛的应用层协议就是 HTTP 了。我想了好久,还是觉得应该把 HTTP 协议写一下。 因为做性能测试分析的人来说,HTTP 协议可能是绕不过去的一个槛。在讲 HTTP 之前,我们得先知道一些基本的信息。 HTTP(HyperText Transfer Protocol,超文本传输协议),显然是…

linux shell编程

linux shell编程1.shell脚本概述2.脚本的调用形式3.shell脚本语法3.1 脚本开头标识3.2 脚本注释3.3 给脚本加上可执行权限3.4 shell脚本的运行方式3.5 检测脚本是否正确3.6 重定向的使用3.7 获取上一条命令的执行结果4.变量4.1 变量的定义和使用4.2 从键盘上读取变量&#xff1…

(十七)Vue之自定义指令

文章目录自定义指令局部指令回调函数形式配置对象形式全局配置回调函数形式配置对象形式Vue学习目录 上一篇:(十六)Vue之内置指令 先看两个需求: 需求1:定义一个v-big指令,和v-text功能类似,…

陈表达学VBA-msgbox辨别用户选择和代码调用

今天有个老客户提出需求: 模块:sub 过程A( ) ①如果是单独使用时则显示msgbox选择消息框 ②如果A过程调用B过程,则不显示消息框,默认选择是 msgbox没有设置默认值这个功能,msgbox也没有参数可以失败是用户点击还是代…

pytorch基础操作(六)利用L2范数(权重衰减)解决线性模型过拟合问题

一、一些概念 训练误差(training error) 是指,模型在训练数据集上计算得到的误差。 泛化误差(generalization error) 是指,模型应⽤在同样从原始样本的分布中抽取的⽆限多数据样本时,模型误差的…

【Linux】Linux基本指令

Linux基本指令1.ls指令2.pwd指令3.cd指令3.touch 指令4.mkdir指令5. rmdir指令 && rm 指令5.1 rmdir5.2 rm6.tree 指令7.man指令8.cp指令9.mv指令10. cat指令11.echo指令12.more指令13.less指令14.wc指令15.head指令16.tail指令17. | (管道指令)…

每天五分钟机器学习:PCA算法如何确定数据压缩降维的最佳维度?

本文重点 上节课程中我们已经学习了pca算法,已经知道了如何将n维特征变量降到k维,k是PCA算法的一个参数,也被称为主成分的数量。那么现在就产生了一个问题,这个问题就是如何选择K,因为PCA要做的就是要尽量减少投射的平均均方误差,所以K的选择很关键。 平均均方误差 其中…

22.MongoDB删除操作效率及相关问题验证

最近遇到一个了一个MongoDB数据删除的问题,需要一次性删除上线即1.5年前~1年前的数据且之后每天清空一年过期的数据。在数据量比较大的情况下何种方式的删除效率最高是一个值得研究的问题,本文通过实际测试找出其中规律。 本文采用腾讯云mongodb集群进行…

基于java的连连看游戏设计-计算机毕业设计

项目介绍 基于java设计的连连看游戏规则是模仿网络上的最普通的连连看游戏,主要是鼠标点击两次的图片能否消去的问题。当前,前提是点击两张相同的图片,若是点击的是同一张图片或者两张不同的图片,则不予处理。在两张相同的图片所…

这份pdf成功让我拿下了蚂蚁金服、字节跳动、小米等大厂的offer

关于程序员,除了做项目来提高自身的技术之外,还有一种提升自己的专业技能就是:多!看!书! 小编整理出一篇Java进阶架构师之路的核心知识,同时也是面试时面试官必问的知识点,篇章也是…

点云可视化工具

点云可视化工具 平时查看点云文件主要是用CloudCompare,基本上也就是打开看看这个点云大概是个什么样子,很少会在CloudCompare对点云进行处理,它可以直接将点云拖进软件进行显示也还是挺方便的。但是还是有点点不是很方便的地方,…

Linux从入门到进阶学习(Ⅲ):Linux权限管控

目录 1 root用户 1.1 su 1.2 sudo 2 用户和用户组 3 查看权限控制信息 4 修改权限控制 4.1 chmod命令 4.2 chown命令 1 root用户 1.1 su root用户即超级管理员 su [-] [用户名] 切换到root用户,exit退回普通用户从 -:可选&#xff0…

社会网络分析工具—— Gephi 或 NetworkX的简单介绍和比较(源自GPTchat)

文章目录我的原始需求两个工具介绍二者比较下载和使用后续 使用教程我的原始需求 如何对不同认知课堂的教师提问行为序列进 行社会网络分析,计算不同认知层级提问行为的中间 中心度和接近中心度, 在进行社会网络分析时,您首先需要收集数据并…

ArcGIS基础:栅格转ASCII校正简单栅格坐标

【校正栅格坐标】 有一些数据量比较小的栅格数据,位置发生了偏移,可以使用【转换工具】对其位置进行校正。 先看一下原始数据: 有2个栅格数据,如下所示,两个数据本身是一个数据,只不过发生了偏移&#x…

java+ssh+mysql银行收银管理系统

项目介绍: 本系统为基于jspmysql的银行管理系统,包含业务员、管理员登录权限,功能如下: 业务员:可以银行系统,可以查看所有客户账户信息、可以新开账户、销户、修改账户信息、存款、取款、转账等功能。 …

C51——通过震动传感器模块让继电器的灯亮起来

继电器触发 模块可以通过跳线设置高电平触发或者低电平触发(默认) 首先明确继电器的工作逻辑 怎么控制“闭合”开关呢 怎么控制“断开”开关呢 NO口 是常开端 NC 常闭端 COM 公共端 通过IO口向继电器发出低电平 ,使得COM口和NO口连接&…