clc;
clear
close all
addpath(genpath(pwd))
X = xlsread('风电场预测.xlsx');
X = X(5665:8640,:); %选取3月份数据
num_samples = length(X); % 样本个数
kim = 10; % 延时步长(kim个历史数据作为自变量)
zim = 1; % 跨zim个时间点进行预测
or_dim = size(X,2);
% 重构数据集
for i = 1: num_samples - kim - zim + 1
res(i, :) = [reshape(X(i: i + kim - 1,:), 1, kim*or_dim), X(i + kim + zim - 1,:)];
end
% 训练集和测试集划分
outdim = 1; % 最后一列为输出
num_size = 0.9; % 训练集占数据集比例
num_train_s = round(num_size * num_samples); % 训练集样本个数
f_ = size(res, 2) - outdim; % 输入特征维度
P_train = res(1: num_train_s, 1: f_)';
T_train = res(1: num_train_s, f_ + 1: end)';
M = size(P_train, 2);
P_test = res(num_train_s + 1: end, 1: f_)';
T_test = res(num_train_s + 1: end, f_ + 1: end)';
N = size(P_test, 2);
% 数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);
[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);
% 格式转换
for i = 1 : M
vp_train{i, 1} = p_train(:, i);
vt_train{i, 1} = t_train(:, i);
end
for i = 1 : N
vp_test{i, 1} = p_test(:, i);
vt_test{i, 1} = t_test(:, i);
end
%% 优化算法优化前,构建优化前的TCN_GRU_Attention模型
outputSize = 1; %数据输出y的维度
numFilters = 64;
filterSize = 5;
dropoutFactor = 0.1;
numBlocks = 2;
layer = sequenceInputLayer(f_,Normalization="rescale-symmetric",Name="input");
lgraph = layerGraph(layer);
outputName = layer.Name;
% 建立网络结构 -- 残差块
for i = 1 : numBlocks
% 膨胀因子
dilationFactor = 2^(i-1);
% 创建TCN正向支路
layers = [
convolution1dLayer(filterSize, numFilters, DilationFactor = dilationFactor, Padding = "causal", Name="conv1_" + i) % 一维卷积层
layerNormalizationLayer % 层归一化
dropoutLayer(dropoutFactor) % 空间丢弃层
convolution1dLayer(filterSize, numFilters, DilationFactor = dilationFactor, Padding = "causal") % 一维卷积层
layerNormalizationLayer % 层归一化
reluLayer % 激活层
dropoutLayer(dropoutFactor) % 空间丢弃层
additionLayer(4, Name = "add_" + i)
];
% 添加残差块到网络
lgraph = addLayers(lgraph, layers);
% 连接卷积层到残差块
lgraph = connectLayers(lgraph, outputName, "conv1_" + i);
% 创建 TCN反向支路flip网络结构
Fliplayers = [
FlipLayer("flip_" + i) % 反向翻转
convolution1dLayer(1, numFilters, Name = "convSkip_"+i); % 反向残差连接
convolution1dLayer(filterSize, numFilters, DilationFactor = dilationFactor, Padding = "causal", Name="conv2_" + i) % 一维卷积层
layerNormalizationLayer % 层归一化
dropoutLayer(dropoutFactor) % 空间丢弃层
convolution1dLayer(filterSize, numFilters, DilationFactor = dilationFactor, Padding = "causal") % 一维卷积层
layerNormalizationLayer % 层归一化
reluLayer % 激活层
dropoutLayer(dropoutFactor, Name="drop" + i) % 空间丢弃层
];
% 添加 flip 网络结构到网络
lgraph = addLayers(lgraph, Fliplayers);
% 连接 flip 卷积层到残差块
lgraph = connectLayers(lgraph, outputName, "flip_" + i);
lgraph = connectLayers(lgraph, "drop" + i, "add_" + i + "/in3");
lgraph = connectLayers(lgraph, "convSkip_"+i, "add_" + i + "/in4");
% 残差连接 -- 首层
if i == 1
% 建立残差卷积层
% Include convolution in first skip connection.
layer = convolution1dLayer(1,numFilters,Name="convSkip");
lgraph = addLayers(lgraph,layer);
lgraph = connectLayers(lgraph,outputName,"convSkip");
lgraph = connectLayers(lgraph,"convSkip","add_" + i + "/in2");
else
lgraph = connectLayers(lgraph,outputName,"add_" + i + "/in2");
end
% Update layer output name.
outputName = "add_" + i;
end
tempLayers = flattenLayer("Name","flatten");
lgraph = addLayers(lgraph,tempLayers);
tempLayers = gruLayer(10,"Name","gru1");
lgraph = addLayers(lgraph,tempLayers);
tempLayers = [
FlipLayer("flip3")
gruLayer(10,"Name","gru2")];
lgraph = addLayers(lgraph,tempLayers);
tempLayers = [
concatenationLayer(1,2,"Name","concat")
selfAttentionLayer(1,50,"Name","selfattention") %单头注意力Attention机制,把1改为2,3,4……即为多头,后面的50是键值
fullyConnectedLayer(outdim,"Name","fc")
regressionLayer("Name","regressionoutput")];
lgraph = addLayers(lgraph,tempLayers);
lgraph = connectLayers(lgraph,outputName,"flatten");
lgraph = connectLayers(lgraph,"flatten","gru1");
lgraph = connectLayers(lgraph,"flatten","flip3");
lgraph = connectLayers(lgraph,"gru1","concat/in1");
lgraph = connectLayers(lgraph,"gru2","concat/in2");
% 参数设置
options0 = trainingOptions('adam', ... % 优化算法Adam
'MaxEpochs', 60, ... % 最大训练次数
'GradientThreshold', 1, ... % 梯度阈值
'InitialLearnRate', 0.01, ... % 初始学习率
'L2Regularization', 0.0001, ... % 正则化参数
'ExecutionEnvironment', 'cpu',... % 训练环境
'Verbose', 1, ... % 关闭优化过程
'Plots', 'none'); % 画出曲线
% 网络训练
tic
net0 = trainNetwork(vp_train,vt_train,lgraph,options0);
toc
%% 测试与评估
t_sim = net0.predict(vp_test);
analyzeNetwork(net0);% 查看网络结构
% 数据反归一化
T_sim = mapminmax('reverse', t_sim, ps_output);
% 数据格式转换
T_sim = cell2mat(T_sim);
T_sim = T_sim';
%% GJO优化TCN-GRU-Attention
disp(' ')
disp('优化BiTCN_GRU_attention神经网络:')
popsize=2; %初始种群规模
maxgen=10; %最大进化代数
fobj = @(x)objectiveFunction(x,f_,vp_train,vt_train,vp_test,T_test,ps_output);
% RIME优化参数设置
Best_pos = [0.001 10 2 0.0001]; %参数的下限。分别是学习率,GRU的神经元个数,注意力机制的键值, 正则化参数
%% 比较算法预测值
str={'真实值','BiTCN-BiGRU-Attention'};
figure('Units', 'pixels', ...
'Position', [300 300 860 370]);
plot(T_test,'-','Color',[0.8500 0.3250 0.0980])
hold on
plot(T_sim,'-.','Color',[0.4940 0.1840 0.5560])
hold on
legend(str)
set (gca,"FontSize",12,'LineWidth',1.2)
box off
legend Box off
%% 比较�
没有合适的资源?快使用搜索试试~ 我知道了~
BiTCN-BiGRU-Attention实现负荷多变量时间序列预测附matlab代码 标准.rar
共16个文件
m:8个
png:4个
xlsx:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 5 浏览量
2024-09-08
13:25:38
上传
评论
收藏 8.76MB RAR 举报
温馨提示
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
资源推荐
资源详情
资源评论
收起资源包目录
【TCN回归预测】基于双向时间卷积双向门控循环单元融合注意力机制BiTCN-BiGRU-Attention实现负荷多变量时间序列预测附matlab代码 标准.rar (16个子文件)
【TCN回归预测】基于双向时间卷积双向门控循环单元融合注意力机制BiTCN-BiGRU-Attention实现负荷多变量时间序列预测附matlab代码 标准
calc_error.m 718B
initialization.m 234B
MAIN.m 11KB
3.png 30KB
MAIN.asv 11KB
1.png 36KB
【TCN回归预测】基于双向时间卷积双向门控循环单元融合注意力机制BiTCN-BiGRU-Attention实现负荷多变量时间序列预测附matlab代码 标准 - 副本.rar 4.38MB
radarChart.m 8KB
untitled.png 33KB
FlipLayer.m 254B
objectiveFunction.m 4KB
风电场预测.xlsx 4.32MB
levy.m 357B
data_process.m 195B
data.xlsx 54KB
2.png 7KB
共 16 条
- 1
资源评论
matlab科研助手
- 粉丝: 3w+
- 资源: 5974
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Kotlin语言的Android开发工具类集合源码
- 零延迟 DirectX 11 扩展实用程序.zip
- 基于Java的语音识别系统设计源码
- 基于Java和HTML的yang_home766个人主页设计源码
- 基于Java与前端技术的全国实时疫情信息网站设计源码
- 基于鸿蒙系统的HarmonyHttpClient设计源码,纯Java实现类似OkHttp的HttpNet框架与优雅的Retrofit注解解析
- 基于HTML和JavaScript的廖振宇图书馆前端设计源码
- 基于Java的Android开发工具集合源码
- 通过 DirectX 12 Hook (kiero) 实现通用 ImGui.zip
- 基于Java开发的YY网盘个人网盘设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功