%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
%% 导入数据
res = xlsread('数据集.xlsx');
% rng(0);
%% 数据分析
num_size = 0.7; % 训练集占数据集比例
outdim = 1; % 最后一列为输出
num_class = length(unique(res(:,end))); % 计算类别数
num_samples = size(res, 1); % 样本个数
kim = size(res, 2)-1; % 样本个数
res = res(randperm(num_samples), :); % 打乱数据集(不希望打乱时,注释该行)
num_train_s = round(num_size * num_samples); % 训练集样本个数
f_ = size(res, 2) - outdim; % 输入特征维度
flag_conusion = 1; % 打开混淆矩阵
%% 划分训练集和测试集
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 = categorical(T_train);
t_test = categorical(T_test );
%% 设置网络参数
numFilters = 8; %卷积核个数 简单数据可以减少卷积和数量
filterSize = 2; %卷积核大小
dropoutFactor = 0.2; % 空间丢失因子
numBlocks = 2; %残差块个数
numFeatures = f_;
%% 建立模型
layer = sequenceInputLayer(numFeatures,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 % 层归一化
spatialDropoutLayer(dropoutFactor) % 空间丢弃层
convolution1dLayer(filterSize, numFilters, DilationFactor = dilationFactor, Padding = "causal") % 一维卷积层
layerNormalizationLayer % 层归一化
reluLayer % 激活层
spatialDropoutLayer(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 % 层归一化
spatialDropoutLayer(dropoutFactor) % 空间丢弃层
convolution1dLayer(filterSize, numFilters, DilationFactor = dilationFactor, Padding = "causal") % 一维卷积层
layerNormalizationLayer % 层归一化
reluLayer % 激活层
spatialDropoutLayer(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
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, "drop" + i, "add_" + i + "/in2");
lgraph = connectLayers(lgraph,outputName,"add_" + i + "/in2");
end
%% 更新输出层名字
outputName = "add_" + i;
end
%% 网络输出层
layers = [
fullyConnectedLayer(num_class,'Name',"fc")
softmaxLayer
classificationLayer];
lgraph = addLayers(lgraph,layers);
lgraph = connectLayers(lgraph,outputName,"fc");
%% 参数设置
options = trainingOptions('adam', ... % Adam 梯度下降算法
'MaxEpochs', 500,... % 最大训练次数
'MiniBatchSize', 32, ... % 批大小
'InitialLearnRate', 0.01,... % 初始学习率为0.01
'L2Regularization', 0.01,... % L2正则化参数
'ExecutionEnvironment','cpu',... % 网络的执行环境 cpu
'Shuffle', 'every-epoch',... % 每次训练打乱数据集
'ValidationPatience', Inf,... % 关闭验证
'Plots', 'training-progress',... % 画出曲线 可关闭
'Verbose', false);
tic
%% 训练
[net , info]= trainNetwork(p_train, t_train, lgraph, options);
run_time = toc;
%% 输出训练时间
disp(['TCN的模型训练时间为: ', num2str(run_time),'s'])
%% 查看网路
analyzeNetwork(lgraph);
%% 绘制训练loss损失图
figure
plot(1: length(info.TrainingAccuracy), info.TrainingAccuracy, 'b-', 'LineWidth', 1)
legend('TCN训练准确率')
xlabel('迭代次数')
ylabel('准确率')
xlim([1, length(info.TrainingAccuracy)])
grid
%% 绘制训练loss损失图
figure
plot(1: length(info.TrainingLoss), info.TrainingLoss, 'r-', 'LineWidth', 1)
legend('TCN训练loss')
xlabel('迭代次数')
ylabel('loss')
xlim([1, length(info.TrainingLoss)])
grid
%% 仿真测试
t_sim1 = predict(net, p_train);
t_sim2 = predict(net, p_test);
%% 数据反归一化
T_sim1 = vec2ind(t_sim1);
T_sim2 = vec2ind(t_sim2);
%% 准确率误差
acc1 = sum((T_sim1 == T_train)) / M * 100 ;
acc2 = sum((T_sim2 == T_test )) / N * 100 ;
disp(['训练集准确率为: ', num2str(acc1)])
disp(['测试集准确率为: ', num2str(acc2)])
%% 数据排序
[T_train, index_1] = sort(T_train);
[T_test , index_2] = sort(T_test );
T_sim1 = T_sim1(index_1);
T_sim2 = T_sim2(index_2);
%% 绘图
figure
plot(1: M, T_train, 'r-*', 1: M, T_sim1, 'b-o', 'LineWidth', 1)
legend('真实值', 'TCN预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'训练集预测结果对比'; ['准确率=' num2str(acc1)]};
title(string)
xlim([1, M])
grid
figure
plot(1: N, T_test, 'r-*', 1: N, T_sim2, 'b-o', 'LineWidth', 1)
legend('真实值', 'TCN预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'测试集预测结果对比'; ['准确率=' num
没有合适的资源?快使用搜索试试~ 我知道了~
【TCN分类】基于双向时间卷积神经网络BiTCN实现故障诊断附matlab代码.rar
共10个文件
png:5个
m:3个
zip:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 197 浏览量
2024-09-08
13:24:59
上传
评论
收藏 395KB RAR 举报
温馨提示
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
资源推荐
资源详情
资源评论
收起资源包目录
【TCN分类】基于双向时间卷积神经网络BiTCN实现故障诊断附matlab代码.rar (10个子文件)
【TCN分类】基于双向时间卷积神经网络BiTCN实现故障诊断附matlab代码
spatialDropoutLayer.m 2KB
3.png 24KB
【TCN分类】基于双向时间卷积神经网络BiTCN实现故障诊断附matlab代码.zip 197KB
main.m 8KB
数据集.xlsx 73KB
1.png 25KB
FlipLayer.m 257B
6.png 30KB
5.png 22KB
4.png 33KB
共 10 条
- 1
资源评论
matlab科研助手
- 粉丝: 3w+
- 资源: 5960
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功