%% 初始化
clear
close all
clc
warning off
% 数据读取
addpath(genpath(pwd));
load ('data.mat') %加载处理好的特征数据
data = vmddata;
% 数据载入
bv = 120; %每种状态数据有120组
% 加标签值
hhh = size(data,2);
for i=1:size(data,1)/bv
data(1+bv*(i-1):bv*i,hhh+1)=i;
end
input=data(:,1:hhh);
output =data(:,end);
jg = bv; %每组120个样本
tn = 90; %选前tn个样本进行训练
input_train = []; output_train = [];
input_test = []; output_test = [];
for i = 1:max(data(:,end))
input_train=[input_train;input(1+jg*(i-1):jg*(i-1)+tn,:)];
output_train=[output_train;output(1+jg*(i-1):jg*(i-1)+tn,:)];
input_test=[input_test;input(jg*(i-1)+tn+1:i*jg,:)];
output_test=[output_test;output(jg*(i-1)+tn+1:i*jg,:)];
end
input_train = input_train';
input_test = input_test';
%归一化
[inputn_train,inputps]=mapminmax(input_train);
[inputn_test,inputtestps]=mapminmax('apply',input_test,inputps);
output_train = categorical(output_train);
output_test = categorical(output_test);
for i = 1:size(input_train,2)
Train_xNorm{i,:} = reshape(inputn_train(:,i),hhh,1,1);
Train_yNorm{i,:} = output_train(i);
end
for i = 1:size(input_test,2)
Test_xNorm{i,:} = reshape(inputn_test(:,i),hhh,1,1);
Test_yNorm{i,:} = output_test(i);
end
numFeatures = size(input,2);
numHiddens = 120;
numClasses = 10;
layers0 = [ ...
sequenceInputLayer([numFeatures,1,1],'name','input') %输入层设置
sequenceFoldingLayer('name','fold') %使用序列折叠层对图像序列的时间步长进行独立的卷积运算。
convolution2dLayer([6,1],8,'Stride',[1,1],'name','conv1') %添加卷积层,64,1表示过滤器大小,10过滤器个数,Stride是垂直和水平过滤的步长
batchNormalizationLayer('name','batchnorm1') % BN层,用于加速训练过程,防止梯度消失或梯度爆炸
reluLayer('name','relu1') % ReLU激活层,用于保持输出的非线性性及修正梯度的问题
maxPooling2dLayer([2,1],'Stride',2,'Padding','same','name','maxpool') % 第一层池化层,包括3x3大小的池化窗口,步长为1,same填充方式
sequenceUnfoldingLayer('name','unfold') %独立的卷积运行结束后,要将序列恢复
flattenLayer('name','flatten')
gruLayer(30,'Outputmode','last','name','hidden1')
dropoutLayer(0.2,'name','dropout_1') % Dropout层,以概率为0.2丢弃输入
fullyConnectedLayer(numClasses,'name','fullconnect') % 全连接层设置(影响输出维度)(cell层出来的输出层) %
selfAttentionLayer(1,50) %创建一个单头,50个键和查询通道的自注意力层
softmaxLayer('Name','softmax')
classificationLayer('name','output')];
lgraph0 = layerGraph(layers0);
lgraph0 = connectLayers(lgraph0,'fold/miniBatchSize','unfold/miniBatchSize');
%% Set the hyper parameters for unet training
options0 = trainingOptions('adam', ... % 优化算法Adam
'MaxEpochs', 150, ... % 最大训练次数
'GradientThreshold', 1, ... % 梯度阈值
'InitialLearnRate', 0.01, ... % 初始学习率
'LearnRateSchedule', 'piecewise', ... % 学习率调整
'LearnRateDropPeriod',100, ... % 训练100次后开始调整学习率
'LearnRateDropFactor',0.01, ... % 学习率调整因子
'L2Regularization', 0.001, ... % 正则化参数
'ExecutionEnvironment', 'cpu',... % 训练环境
'Verbose', 1, ... % 关闭优化过程
'Plots', 'none'); % 画出曲线
% % start training
t0 = tic; %开始计时
net = trainNetwork(Train_xNorm,output_train, lgraph0,options0 );
toc(t0); % 从t0开始到此处的执行时间
%% Accuracy assessment
pred = classify(net, Test_xNorm);
accuracy=sum(output_test==pred)/length(pred); %计算预测的确率
% 标准gru作图
% 画方框图
figure('Position',[10,50,800,600])
set(gca,'looseInset',[0 0 0 0])
confMat = confusionmat(output_test,pred); %output_test是真实值标签
zjyanseplotConfMat(confMat.');
xlabel('Predicted label')
ylabel('Real label')
title(['CNN-gru-Attention的测试集正确率 = ',num2str(accuracy*100),' %'])
% 作图
figure('Position',[50,50,800,600])
set(gca,'looseInset',[0 0 0 0])
plot(1:length(pred),pred,'p-','Color',[0.9290 0.6940 0.1250],'LineWidth',1)
hold on
plot(1:length(pred),output_test,'*-','Color',[0 0.4470 0.7410])
legend('预测类别','真实类别','NorthWest')
title(['CNN-gru-Attention的测试集正确率 = ',num2str(accuracy*100),' %'])
xlabel('预测样本编号')
ylabel('分类结果')
box on
set(gca,'fontsize',12)

机器学习之心
- 粉丝: 2w+
- 资源: 1124
最新资源
- 基于蒙特卡洛法的概率潮流分析:研究IEEE 33节点电网光伏与风电概率出力模型及其电压概率出力曲线,基于蒙特卡洛法的光伏和风电概率出力模型在IEEE33节点电网的概率潮流计算与电压概率出力曲线研究,基
- 多智能体协同与分布式博弈的优化一致性方法,基于多智能体的分布式博弈策略与一致性协调机制,多智能体一致性的分布式博弈方法 ,多智能体一致性; 分布式博弈; 方法,分布式博弈:多智能体一致性协同算法研究
- 基于瞬时无功功率理论的并联型两电平有源电力滤波器仿真计算与实现:谐波抑制、无功补偿与电网电压条件下的高效稳定运行,基于瞬时无功功率理论的并联型两电平有源电力滤波器仿真计算与实现:谐波抑制、无功补偿及电
- 可编程滤波器ADA2200的配置和应用解析
- DeepSeek-R1论文中英文对照版.pdf
- 使用CarSim和Simulink联合仿真实现无人驾驶跟踪双移线轨迹技术挑战的探索,使用CarSim和Simulink联合仿真实现无人驾驶跟踪双移线轨迹的挑战与优势,无人驾驶 carsim+simul
- DeepSeek如何赋能职场应用?从提示语技巧到多场景应用-清华大学.pdf
- Labview与西门子PLC联机通讯实战:拓展性强且附赠完整源码解析,Labview与西门子PLC联机通讯测试实践:拓展性强并附赠通讯源码详解,1.Labview与西门子PLC联机通讯实现测试 2.拓
- DeepSeek 与 DeepSeek-R1 专业研究报告.pdf
- 高电流热插拔应用中TPS2393A控制器的优化设计与应用
- Ansys Comsol力磁耦合仿真:电磁无损检测技术与流固耦合分析的深度探索,Ansys Comsol力磁耦合仿真:电磁无损检测技术与流固耦合分析的深度探究,Ansys Comsol 力磁耦合仿真
- 基于Matlab的GC5322 DPD系统数据分析方法和技术要点
- 户外储能电源设计方案:2KW双向逆变器主板技术资料汇编 该资料包含原理文件、PCB文件、源代码、BOM表及非标件电感与变压器规格参数等,适用于2KW(可调至3KW)户外储能电源项目 该方案采用双向D
- 腾讯详解-详解DeepSeek: 模型训练、优化及数据处理的技术精髓
- hello-algo-1.2.0-zh-hant-java版本hello算法
- DC-DC变换Boost与Buck电路的双闭环控制策略:占空比调控下的电压调整技术,DC-DC变换Boost与Buck电路双闭环控制技术研究:占空比调控输入与输出电压的精准策略,DC-DC变的Boos
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


