%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
%% 导入数据
P_train = xlsread('data','training set','B2:G191')';
T_train= xlsread('data','training set','H2:H191')';
% 测试集——44个样本
P_test=xlsread('data','test set','B2:G45')';
T_test=xlsread('data','test set','H2:H45')';
%% 数据分析
outdim = 1; % 最后一列为输出
f_ = size(P_train, 1); % 输入特征维度
%% 得到训练集和测试样本个数
M = size(P_train, 2);
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);
%% 数据格式转换
pc_train{1, 1} = p_train;
pc_test {1, 1} = p_test ;
tc_train{1, 1} = t_train;
tc_test {1, 1} = t_test ;
%% 优化算法参数设置
SearchAgents_no = 6; % 数量
Max_iteration = 10; % 最大迭代次数
dim = 3; % 优化参数个数
lb = [0.001, 2, 16]; %% 寻优参数下限 [学习率, 卷积核大小, 卷积核数量];
ub = [0.01, 8, 32]; %% 寻优参数上限 [学习率, 卷积核大小, 卷积核数量];
fitness = @(x)fical(x);
[Best_score,Best_pos,curve]=TransitSearch(SearchAgents_no,Max_iteration,lb ,ub,dim,fitness)
best_hd = round(Best_pos(1, 2)); % 卷积核大小
best_lr= Best_pos(1, 1);% 最佳初始学习率
best_l2 = round(Best_pos(1, 3));%卷积核个数
Best_pos(1, 2) = round(Best_pos(1, 2));
Best_pos(1, 3) = round(Best_pos(1, 3));
numFilters=best_l2 ;
filterSize=best_hd;
%% 设置网络参数
% numFilters = 16; % 卷积核个数
% filterSize = 3; % 卷积核大小
dropoutFactor = 0.05; % 空间丢失因子
numBlocks = 1; % 残差块个数
numFeatures = f_; % 特征个数
%% 输入层结构
layer = sequenceInputLayer(numFeatures, Normalization = "rescale-symmetric", Name = "input");
%% 将输入层加入空白网络
lgraph = layerGraph(layer);
outputName = layer.Name;
%% 建立网络结构 -- 残差块
for i = 1 : numBlocks
dilationFactor = 2 ^(i - 1); % 膨胀因子
% 建立网络结构
layers = [
convolution1dLayer(filterSize, numFilters, DilationFactor = dilationFactor, ...
Padding = "causal", Name="conv1_" + i) % 一维卷积层
layerNormalizationLayer % 层归一化
spatialDropoutLayer(dropoutFactor) % 空间丢弃层
convolution1dLayer(filterSize, numFilters, ...
DilationFactor = dilationFactor, Padding = "causal") % 一维卷积层
layerNormalizationLayer % 层归一化
reluLayer % 激活层
spatialDropoutLayer(dropoutFactor) % 空间丢弃层
additionLayer(2, Name = "add_" + i)]; % 合并层
lgraph = addLayers(lgraph, layers); % 将卷积层加入到网络
lgraph = connectLayers(lgraph, outputName, "conv1_" + i); % 将模块的卷积层首层和残差结构连接
% 残差连接 -- 首层
if i == 1
layer = convolution1dLayer(1, numFilters, Name = "convSkip"); % 建立残差卷积层
lgraph = addLayers(lgraph, layer); % 将残差卷积层加入到网络
lgraph = connectLayers(lgraph, outputName, "convSkip"); % 将残差卷积层
lgraph = connectLayers(lgraph, "convSkip", "add_" + i + "/in2"); % 将跳跃残差层连接到 addtion 层 输入口2
else
lgraph = connectLayers(lgraph, outputName, "add_" + i + "/in2"); % 将残差层连接到 addtion 层 输入口2
end
% 更新输出层名字
outputName = "add_" + i;
end
% 输出层
layers = [
selfAttentionLayer(6,6,"Name","multihead-attention") % 多头注意力机制+多通道
fullyConnectedLayer(1, Name = "fc")
regressionLayer];
% 将输出层加入到网络
lgraph = addLayers(lgraph, layers);
% 连接输出层到网络最后
lgraph = connectLayers(lgraph, outputName, "multihead-attention");
%% 查看网络结构
figure
plot(lgraph)
title("Temporal Convolutional Network")
%% 设置训练参数
options = trainingOptions('adam', ... % Adam 梯度下降算法
'MaxEpochs',1500, ... % 最大训练次数1000
'GradientThreshold',1,... % 渐变的正阈值 1
'ExecutionEnvironment','cpu',... % 网络的执行环境 cpu
'InitialLearnRate',best_lr,...% 初始学习率
'LearnRateSchedule','none',... % 训练期间降低整体学习率的方法 不降低
'Shuffle','every-epoch',... % 每次训练打乱数据集
'MiniBatchSize',1,... % 训练批次大小 每次训练样本个数15
'Plots', 'training-progress', ... % 画出曲线
'Verbose',true); % 有关训练进度的信息不打印到命令窗口中
%% 训练网络
[net,bestInfo] = trainNetwork(pc_train, tc_train, lgraph, options);
%% 仿真预测
t_sim1 = predict(net, pc_train);
t_sim2 = predict(net, pc_test );
%% 格式转换
T_sim1 = double(t_sim1{1, 1});
T_sim2 = double(t_sim2{1, 1});
%% 数据反归一化
T_sim1 = mapminmax('reverse', T_sim1, ps_output);
T_sim2 = mapminmax('reverse', T_sim2, ps_output);
%% 查看网络结构
analyzeNetwork(net)
%% 损失迭代变化曲线
num_iterations = size(bestInfo.TrainingLoss,2);
train_curve = smooth((bestInfo.TrainingLoss),2) ;%% 损失曲线
% 定义角度范围(由内到外)
theta = linspace(0, 2*pi, num_iterations); % 用于闭合圆形
% 转换训练曲线数据为极坐标系下的数据(半径由高到低)
rho = max(train_curve) - train_curve;
% 绘制极坐标图
figure;
polarplot(theta, rho, 'Color', [0.875 0 1], 'LineWidth', 3);
% 设置极坐标图属性
ax = gca; % 获取当前轴句柄
ax.RAxis.Label.String = '训练误差'; % 设置半径标签
ax.ThetaAxis.Label.String = '迭代次数'; % 设置角度标签
ax.RAxis.Label.FontSize = 12; % 设置标签字体大小
ax.ThetaAxis.Label.FontSize = 12;
ax.RLim = [0, max(rho)]; % 设置半径范围
ax.RTick = [];
title('损失迭代变化曲线', 'FontSize', 14);
%% RMSE迭代变化曲线
num_iterations = size(bestInfo.TrainingRMSE,2);
RMSE_curve = smooth((bestInfo.TrainingRMSE),2) ;%% 损失曲线
% 定义角度范围(由内到外)
theta = linspace(0, 2*pi, num_iterations); % 用于闭合圆形
% 转换训练曲线数据为极坐标系下的数据(半径由高到低)
rho = max(RMSE_curve) - RMSE_curve;
% 绘制极坐标图
figure;
polarplot(theta, rho, 'Color', [0 0.25 1], 'LineWidth', 3);
% 设置极坐标图属性
ax = gca; % 获取当前轴句柄
ax.RAxis.Label.String = '训练误差'; % 设置半径标签
ax.ThetaAxis.Label.String = '迭代次数'; % 设置角度标签
ax.RAxis.Label.FontSize = 12; % 设置标签字体大小
ax.ThetaAxis.Label.FontSize = 12;
ax.RLim = [0, max(rho)]; % 设置半径范围
ax.RTick = [];
title('RMSE迭代变
没有合适的资源?快使用搜索试试~ 我知道了~
基于凌日算法优化TSOA-TCN-Attention实现电力负荷预测附matlab代码.rar
共8个文件
m:6个
zip:1个
xlsx:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 12 浏览量
2024-09-08
13:25:25
上传
评论
收藏 82KB RAR 举报
温馨提示
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
资源推荐
资源详情
资源评论
收起资源包目录
【TCN回归预测】基于凌日算法优化时间卷积网络结合多头注意力机制TSOA-TCN-Attention实现电力负荷预测附matlab代码.rar (8个子文件)
【TCN回归预测】基于凌日算法优化时间卷积网络结合多头注意力机制TSOA-TCN-Attention实现电力负荷预测附matlab代码
fical.m 4KB
Bounds.m 272B
initialization.m 427B
spatialDropoutLayer.m 2KB
TransitSearch.m 8KB
【TCN回归预测】基于凌日算法优化时间卷积网络结合多头注意力机制TSOA-TCN-Attention实现电力负荷预测附matlab代码.zip 40KB
main.m 12KB
data.xlsx 36KB
共 8 条
- 1
资源评论
matlab科研助手
- 粉丝: 3w+
- 资源: 5960
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- new_bird_c-c语言入门
- christmasTree-圣诞树html网页代码
- working-shell脚本入门——流程控制
- hadoop_install-sqoop数据导入
- ThinkCMF-mysql安装
- BigData-Notes-sqoop的安装与配置
- C语言-leetcode题解之28-implement-strstr.c
- C语言-leetcode题解之27-remove-element.c
- C语言-leetcode题解之26-remove-duplicates-from-sorted-array.c
- C语言-leetcode题解之24-swap-nodes-in-pairs.c
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功