%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
%% 导入数据
data= xlsread('data.xlsx');
%% 划分训练集和测试集
[MM,NN]=size(data);
SS=randperm(MM);
train_num=round(MM*0.8);
ceshi_num=MM-round(MM*0.8);
P_train = data((1:train_num), 1: NN-1)';
T_train = data((1:train_num), NN)';
M = size(P_train, 2);
P_test = data((train_num+1:MM), 1: NN-1)';
T_test =data((train_num+1:MM), NN)';
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);
%% TCN_LSTM_Attention
%% 数据格式转换
pc_train{1, 1} = P_train;
pc_test {1, 1} = P_test ;
tc_train{1, 1} = t_train;
tc_test {1, 1} = t_test ;
%% 设置网络参数
numFilters = 16; % 卷积核个数
filterSize = 5; % 卷积核大小
dropoutFactor = 0.2; % 空间丢失因子
numBlocks = 1; % 残差块个数
numFeatures = NN-1; % 特征个数
%% 输入层结构
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
%% 网络输出层
% 添加 LSTM 层
% lstmLayer = lstmLayer(hiddenSize, 'Name', 'lstm');
lstmLayer = lstmLayer(100, 'Name', 'lstm');
lgraph = addLayers(lgraph, lstmLayer);
lgraph = connectLayers(lgraph, outputName, 'lstm');
% 添加全连接层
layers = [
selfAttentionLayer(numFeatures,numFeatures,"Name","multihead-attention") % 多头注意力机制+多通道
fullyConnectedLayer(1, 'Name', 'fc')
regressionLayer];
lgraph = addLayers(lgraph, layers);
lgraph = connectLayers(lgraph, 'lstm', 'multihead-attention');
%设置权重衰减参数实现 L2 正则化
weightDecay = 0.01; % 正则化项权重
% 更新每个卷积层、LSTM 层和全连接层的权重衰减参数
numLayers = numel(lgraph.Layers); %获取网络中层的数量
for i = 1:numLayers
layer = lgraph.Layers(i);
if isa(layer, 'CausalConvolution1DLayer') || isa(layer, 'nnet.cnn.layer.FullyConnectedLayer') %检查当前层是否为因果卷积层、LSTM 层或全连接层。如果是,则执行以下操作
layer.WeightLearnRateFactor = 1;
layer.WeightL2Factor = weightDecay;
end
end
%% 设置训练参数
options = trainingOptions('adam', ... % Adam 梯度下降算法
'MaxEpochs', 1000, ... % 最大迭代次数
'MiniBatchSize',16,... % 批处理
'InitialLearnRate', 1e-3, ... % 初始学习率为0.001
'LearnRateSchedule', 'piecewise', ... % 学习率下降
'LearnRateDropFactor', 0.1, ... % 学习率下降因子 0.1
'LearnRateDropPeriod', 500, ... % 经过训练后 学习率为 0.001 * 0.1
'Shuffle', 'every-epoch', ... % 每次训练打乱数据集
'Plots', 'training-progress', ... % 画出曲线
'Verbose', 1); % 打印
%% 训练网络
[net,traininfo]= trainNetwork(pc_train, tc_train, lgraph, options);
%% 查看网络结构
analyzeNetwork(net)
%% 仿真预测
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_TCN_LSTM_Attention = mapminmax('reverse', T_sim1, ps_output);
T_sim2_TCN_LSTM_Attention = mapminmax('reverse', T_sim2, ps_output);
% [T_sim1_TCN_LSTM_Attention,T_sim2_TCN_LSTM_Attention]=TCN_LSTM_Attention(p_train, t_train,p_test,t_test , ps_output,NN);%测试集
[R1_TCN_LSTM_Attention,rmse1_TCN_LSTM_Attention,biaozhuncha1_TCN_LSTM_Attention,mae1_TCN_LSTM_Attention,mape1_TCN_LSTM_Attention]=calc_error(T_train,T_sim1_TCN_LSTM_Attention);%训练集
[R2_TCN_LSTM_Attention,rmse2_TCN_LSTM_Attention,biaozhuncha2_TCN_LSTM_Attention,mae2_TCN_LSTM_Attention,mape2_TCN_LSTM_Attention]=calc_error(T_test,T_sim2_TCN_LSTM_Attention);%测试集
%% TCN_LSTM
% [T_sim1_TCN_LSTM,T_sim2_TCN_LSTM]=TCN_LSTM(p_train,p_test,t_train,t_test, ps_output,NN);
%% 数据格式转换
tc_test {1, 1} = t_test ;
%% 设置网络参数
numFilters = 16; % 卷积核个数
filterSize = 5; % 卷积核大小
dropoutFactor = 0.2; % 空间丢失因子
numBlocks = 1; % 残差块个数
numFeatures = NN-1; % 特征个数
%% 输入层结构
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") % 一维卷积层
没有合适的资源?快使用搜索试试~ 我知道了~
TCN-LSTM-Multihead-Attention TCN-LSTM LSTM TCN实现风电预测Matlab.rar
共12个文件
m:8个
png:2个
xlsx:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 82 浏览量
2024-09-08
13:25:31
上传
评论
收藏 487KB RAR 举报
温馨提示
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
资源推荐
资源详情
资源评论
收起资源包目录
【TCN回归预测】基于时间卷积神经网络结合长短记忆神经网络多头注意力机制TCN-LSTM-Multihead-Attention TCN-LSTM LSTM TCN实现风电多输入预测Matlab实现.rar (12个子文件)
【TCN回归预测】基于时间卷积神经网络结合长短记忆神经网络多头注意力机制TCN-LSTM-Multihead-Attention TCN-LSTM LSTM TCN实现风电多输入预测Matlab实现
calc_error.m 2KB
spatialDropoutLayer.m 1KB
TCN_LSTM.asv 4KB
3.png 207KB
QRegressionLayer.m 1KB
TCN_LSTM.m 4KB
LSTM.m 1KB
TCN.m 8KB
main2.m 15KB
data.xlsx 36KB
TCN_LSTM_Attention.m 5KB
2.png 248KB
共 12 条
- 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直接复制
信息提交成功