EI论文程序:CNN-GRU-Attention时序和空间特征结合-融合注意力机制预测程序代码!数据Excel导入,直接运行!
CNN-GRU-Attention预测模型通过引入CNN进行特征提取,GRU进行时序建模,并结合Attention机制实现了对超短期风功率的精确预测。这些创新点使得模型能够更好地从序列数据中提取特征、利用时间信息,并关注对预测结果有重要贡献的部分,提高了预测的准确性和可靠性,适用于风速预测,光伏功率预测,发电功率预测,海上风电预测,碳价预测等等
适用平台:Matlab 2023及以上
本程序参考中文期刊《基于AVMD-CNN-GRU-Attention的超短期风功率预测研究》中的预测模型CNN-GRU-Attention,程序注释清晰,干货满满,下面对文章和程序做简要介绍。
CNN-GRU-Attention预测模型的创新点如下:
CNN部分:模型采用了卷积神经网络(CNN)进行特征提取。将各子模态输入到CNN网络中进行特征抽取。这样可以从多维历史数据中提取出有用的特征信息,为后续的预测提供更准确的输入。
GRU部分:模型使用了门控循环单元(GRU)作为时序建模的方法。在CNN提取的特征序列上,通过GRU模型对特征序列的时序前后关系进行建模,从而捕捉到序列中的长期依赖关系。这样可以更好地利用序列数据中的时间信息,提高预测的准确性。
Attention部分:模型引入了注意力机制(Attention)对GRU模型的输出进行加权。通过对GRU输出的隐藏层状态参数进行重新分配权值,模型可以更加关注重要的时间步并忽略无关的信息,从而提高预测的精度。这样可以有效地提高模型对特征序列中不同部分的关注程度,提升预测的准确性。
CNN-GRU-Attention预测模型结构:
预测值与实际值对比:
卷积层所提的特征可视化:
数据格式:多变量回归预测程序是这样的,输入前一天18个气象特征,采样时间为24小时,输出为第二天的24小时的功率出力,也就是18×24输入,1×24输出,一共有75个这样的样本
部分代码:
%% CNN-GRU-Attention网络搭建
layers = [
sequenceInputLayer([18 24 1],"Name","sequence")
convolution2dLayer([3 3],32,"Name","conv","Padding","same")
batchNormalizationLayer("Name","batchnorm")
reluLayer("Name","relu")
maxPooling2dLayer([3 3],"Name","maxpool","Padding","same")
flattenLayer("Name","flatten")
gruLayer(50,"Name","gru")
selfAttentionLayer(1,50,"Name","selfattention")
fullyConnectedLayer(24,"Name","fc")
regressionLayer("Name","regressionoutput")];
%% 参数设置
options = trainingOptions('sgdm', ... % SGDM 梯度下降算法
'MaxEpochs',300, ... % 最大训练次数 300
'GradientThreshold',1,... % 渐变的正阈值 1
'ExecutionEnvironment','cpu',... % 网络的执行环境 cpu
'InitialLearnRate',0.01,... % 初始学习率 0.01
'LearnRateSchedule','none',... % 训练期间降低整体学习率的方法 不降低
'Shuffle','every-epoch',... % 每次训练打乱数据集
'SequenceLength',24,... % 序列长度 24
'Plots','training-progress',... % 画出训练曲线
'MiniBatchSize',15,... % 训练批次大小 每次训练样本个数15
'Verbose',0); % 有关训练进度的信息不打印到命令窗口中
analyzeNetwork(layers); % 分析网络结构
%% 训练网络
net = trainNetwork(XTrain,YTrain,layers,options);
%% 绘制某层的特征图,实现特征可视化
%激活某一层
LayersNeed = activations(net,XTrain,'conv','OutputAs','channels');% conv层的特征
%% 画图
numNeed = 3 ; %按需要取几张特征图
for i = 1:numNeed
LayersFeature = reshape(cell2mat(LayersNeed(1,:)),18,24,32,[]); %根据analyzeNetwork分析结果,构造合适尺寸的特征图
axes1 = axes('Parent',figure);
hold(axes1,'on');
image(LayersFeature(:,:,i),'Parent',axes1,'CDataMapping','scaled');
colormap(hsv)
xlim([0, size(LayersFeature,2)]);% 限制坐标轴
ylim([0, size(LayersFeature,1)]);% 限制坐标轴
end
完整代码:https://mbd.pub/o/bread/ZZaWmJ9q
欢迎感兴趣的小伙伴关注并后台留言获取完整版代码哦~,小编会继续推送更有质量的学习资料、文章程序代码~
更多推荐
所有评论(0)