%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
%% 读取数据
res = xlsread('数据集.xlsx');
%% 分析数据
num_class = length(unique(res(:, end))); % 类别数(Excel最后一列放类别)
num_dim = size(res, 2) - 1; % 特征维度
num_res = size(res, 1); % 样本数(每一行,是一个样本)
num_size = 0.7; % 训练集占数据集的比例
res = res(randperm(num_res), :); % 打乱数据集(不打乱数据时,注释该行)
flag_conusion = 1; % 标志位为1,打开混淆矩阵(要求2018版本及以上)
%% 设置变量存储数据
P_train = []; P_test = [];
T_train = []; T_test = [];
%% 划分数据集
for i = 1 : num_class
mid_res = res((res(:, end) == i), :); % 循环取出不同类别的样本
mid_size = size(mid_res, 1); % 得到不同类别样本个数
mid_tiran = round(num_size * mid_size); % 得到该类别的训练样本个数
P_train = [P_train; mid_res(1: mid_tiran, 1: end - 1)]; % 训练集输入
T_train = [T_train; mid_res(1: mid_tiran, end)]; % 训练集输出
P_test = [P_test; mid_res(mid_tiran + 1: end, 1: end - 1)]; % 测试集输入
T_test = [T_test; mid_res(mid_tiran + 1: end, end)]; % 测试集输出
end
%% 数据转置
P_train = P_train'; P_test = P_test';
T_train = T_train'; T_test = T_test';
%% 得到训练集和测试样本个数
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 = categorical(T_train);
t_test = categorical(T_test );
%% 数据格式转换
for i = 1: M
pc_train{1, i} = p_train(:, i);
tc_train{1, i} = t_train(:, i);
end
for i = 1: N
pc_test {1, i} = p_test(:, i);
tc_test {1, i} = t_test(:, i);
end
%% 设置网络参数
numFilters = 16; % 卷积核个数
filterSize = 3; % 卷积核大小
dropoutFactor = 0.05; % 空间丢失因子
numBlocks = 2; % 残差块个数
numFeatures = num_dim; % 特征个数
numClasses = num_class; % 类别个数
%% 输入层结构
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(num_class, Name = "fc")
softmaxLayer
classificationLayer];
lgraph = addLayers(lgraph, layers); % 将输出层加入到网络
lgraph = connectLayers(lgraph, outputName, "fc"); % 连接输出层到网络最后
%% 查看网络结构
figure
plot(lgraph)
title("Temporal Convolutional Network")
%% 设置训练参数
options = trainingOptions("adam", ... % 优化器Adam
InitialLearnRate = 5e-3, ... % 初始学习率为0.005
MaxEpochs = 120, ... % 最大训练次数
miniBatchSize = 30, ... % 批大小
LearnRateSchedule = 'piecewise', ... % 学习率下降
LearnRateDropFactor = 0.8, ... % 学习率下降因子 0.8
LearnRateDropPeriod = 50, ... % 经过50次训练后 学习率为 0.005*0.8
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 );
%% 反归一化
for i = 1: M
T_sim1(i) = cell2mat(vec2ind(t_sim1(i)));
end
for i = 1: N
T_sim2(i) = cell2mat(vec2ind(t_sim2(i)));
end
%% 性能评价
error1 = sum((T_sim1 == T_train)) / M * 100 ;
error2 = sum((T_sim2 == T_test )) / N * 100 ;
%% 查看网络结构
analyzeNetwork(net)
%% 绘图
figure
plot(1: M, T_train, 'r-*', 1: M, T_sim1, 'b-o', 'LineWidth', 1)
legend('真实值', '预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'训练集预测结果对比'; ['准确率=' num2str(error1) '%']};
title(string)
grid
figure
plot(1: N, T_test, 'r-*', 1: N, T_sim2, 'b-o', 'LineWidth', 1)
legend('真实值', '预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'测试集预测结果对比'; ['准确率=' num2str(error2) '%']};
title(string)
grid
%% 混淆矩阵
if flag_conusion == 1
figure
cm = confusionchart(T_train, T_sim1);
cm.Title = 'Confusion Matrix for Train Data';
cm.ColumnSummary = 'column-normalized';
cm.RowSummary = 'row-normalized';
figure
cm = confusionchart(T_test, T_sim2);
cm.Title = 'Confusion Matrix for Test Data';
cm.ColumnSummary = 'column-normalized';
cm.RowSummary = 'row-normalized';
end
没有合适的资源?快使用搜索试试~ 我知道了~
基于TCN时间卷积神经网络的数据分类预测(Matlab完整源码和数据)
共3个文件
m:2个
xlsx:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 100 浏览量
2022-12-08
23:29:57
上传
评论 5
收藏 74KB ZIP 举报
温馨提示
基于TCN时间卷积神经网络的数据分类预测(Matlab完整源码和数据) TCN时间卷积神经网络,数据分类预测,输入多个数据,分四类特征。 运行环境2021b及以上,TCN时间卷积神经网络的数据分类
资源推荐
资源详情
资源评论
收起资源包目录
基于时间卷积神经网络的数据分类预测.zip (3个子文件)
基于时间卷积神经网络的数据分类预测
main.m 7KB
spatialDropoutLayer.m 2KB
数据集.xlsx 73KB
共 3 条
- 1
资源评论
前程算法屋
- 粉丝: 4180
- 资源: 712
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功