%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
%% 导入数据
res =xlsread('data.xlsx','sheet1');
%% 数据分析
num_size = 0.7; % 训练集占数据集比例
outdim = 1; % 最后一列为输出
num_samples = size(res, 1); % 样本个数
res = res(randperm(num_samples), :); % 打乱数据集(不希望打乱时,注释该行)
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);
%% 数据格式转换
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 = 3; % 卷积核大小
dropoutFactor = 0.05; % 空间丢失因子
numBlocks = 1; % 残差块个数
numFeatures = 7; % 特征个数
%% 输入层结构
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 = [
fullyConnectedLayer(outdim, Name = "fc")
regressionLayer];
lgraph = addLayers(lgraph, layers); % 将输出层加入到网络
lgraph = connectLayers(lgraph, outputName, "fc"); % 连接输出层到网络最后
%% 查看网络结构
figure
plot(lgraph)
title("Temporal Convolutional Network")
%% 设置训练参数
options = trainingOptions("adam", ... % 优化器Adam
InitialLearnRate = 1e-2, ... % 初始学习率为0.01
MaxEpochs = 1000, ... % 最大训练次数
miniBatchSize = 1, ... % 批大小
Plots = "training-progress", ... % 显示训练曲线
Verbose = 0); % 关闭命令行
%% 训练网络
net = 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);
%% 均方根误差
error1 = sqrt(sum((T_sim1 - T_train).^2) ./ M);
error2 = sqrt(sum((T_sim2 - T_test ).^2) ./ N);
figure
plot(T_sim1,'b-.o','linewidth',2)
hold on
plot(T_train,'g-s','linewidth',2)
hold on
legend('真实值','TCN预测值')
xlabel('测试样本编号')
ylabel('指标值')
title('训练集TCN模型预测值和真实值对比图')
figure
plot(T_sim2,'b-.o','linewidth',2)
hold on
plot(T_test,'g-s','linewidth',2)
hold on
legend('真实值','TCN预测值')
xlabel('测试样本编号')
ylabel('指标值')
title('测试集TCN模型预测值和真实值对比图')
figure
plot(error1,'b-s','markerfacecolor','g')
hold on
plot(error2,'r-p','markerfacecolor','g')
legend('训练集预测误差','测试集预测误差')
xlabel('测试样本编号')
ylabel('预测偏差')
%% 绘图
figure
plot(T_sim1,'-s','Color',[255 0 0]./255,'linewidth',1,'Markersize',5,'MarkerFaceColor',[250 0 0]./255)
hold on
plot(T_train,'-o','Color',[150 150 150]./255,'linewidth',0.8,'Markersize',4,'MarkerFaceColor',[150 150 150]./255)
legend( 'TCN拟合训练数据','实际分析数据','Location','NorthWest','FontName','华文宋体');
title('TCN模型预测结果及真实值','fontsize',12,'FontName','华文宋体')
xlabel('样本','fontsize',12,'FontName','华文宋体');
ylabel('数值','fontsize',12,'FontName','华文宋体');
xlim([1 M])
%-------------------------------------------------------------------------------------
figure
bar((T_sim1 - T_train)./T_train)
legend('TCN模型训练集相对误差','Location','NorthEast','FontName','华文宋体')
title('TCN模型训练集相对误差','fontsize',12,'FontName','华文宋体')
ylabel('误差','fontsize',12,'FontName','华文宋体')
xlabel('样本','fontsize',12,'FontName','华文宋体')
xlim([1 M]);
%-------------------------------------------------------------------------------------
figure
plot(T_sim2,'-s','Color',[0 0 255]./255,'linewidth',1,'Markersize',5,'MarkerFaceColor',[0 0 255]./255)
hold on
plot(T_test,'-o','Color',[0 0 0]./255,'linewidth',0.8,'Markersize',4,'MarkerFaceColor',[0 0 0]./255)
legend('TCN预测测试数据','实际分析数据','Location','NorthWest','FontName','华文宋体');
title('TCN模型预测结果及真实值','fontsize',12,'FontName','华文宋体')
xlabel('样本','fontsize',12,'FontName','华文宋体');
ylabel('数值','fontsize',12,'FontName','华文宋体');
xlim([1 N])
%-------------------------------------------------------------------------------------
figure
bar((T_sim2 - T_test )./T_test)
legend('TCN模型测试集相对误差','Location','NorthEast','FontName','华文宋体')
title('TCN模型测试集相对误差','fontsize',12,'FontName','华文宋体')
ylabel('误差','f
没有合适的资源?快使用搜索试试~ 我知道了~
【TCN回归预测】基于双向时间卷积神经网络BiTCN实现光伏回归预测附matlab代码.rar
共8个文件
m:5个
xlsx:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 122 浏览量
2024-09-08
13:25:34
上传
评论
收藏 3.93MB RAR 举报
温馨提示
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
资源推荐
资源详情
资源评论
收起资源包目录
【TCN回归预测】基于双向时间卷积神经网络BiTCN实现光伏回归预测附matlab代码.rar (8个子文件)
【TCN回归预测】基于双向时间卷积神经网络BiTCN实现光伏回归预测附matlab代码
calc_error.m 2KB
spatialDropoutLayer.m 2KB
main.m 9KB
数据集.xlsx 39KB
FlipLayer.m 257B
验证.xlsx 1.1MB
main2.m 9KB
data.xlsx 3.27MB
共 8 条
- 1
资源评论
matlab科研助手
- 粉丝: 3w+
- 资源: 5974
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Spring Cloud商城项目专栏 049 支付
- sensors-18-03721.pdf
- Facebook.apk
- 推荐一款JTools的call-this-method插件
- json的合法基色来自红包东i请各位
- 项目采用YOLO V4算法模型进行目标检测,使用Deep SORT目标跟踪算法 .zip
- 针对实时视频流和静态图像实现的对象检测和跟踪算法 .zip
- 部署 yolox 算法使用 deepstream.zip
- 基于webmagic、springboot和mybatis的MagicToe Java爬虫设计源码
- 通过实时流协议 (RTSP) 使用 Yolo、OpenCV 和 Python 进行深度学习的对象检测.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功