1.数据集格式
本文主要实现目的:时序信号---信号类别
数据集格式:输入格式
训练数据X_train是一个元胞数组。按照列排序。每个元胞第一行是时序信号,第二行是一个补充的特征信息。 如果有需要可以加一行,减一行。记得在网络结构的特征维度那里修改一下。
输出格式:Y_train是一个double数组,列排序。如图,是这样一个对应关系。每个元胞代表一段信号,对应着Y_train中的标签。
2.LSTM代码
复制到Matlab中就能跑的代码。 数据集不知道要不要保密,我的论文还没录用。
clc
clear all
load X_train.mat
load Y_train.mat
load X_test.mat
load Y_test.mat
%% 训练
Y_train=categorical(Y_train,[0,1,2,3,4,5],{'A','B','C','D','E','F'}); % 改为分类数组,并将0-5和A-F对于更换
%% 验证集输入
idx = randperm(length(X_train),2000);
for i_dx=1:length(idx)
XValidation{i_dx,1} = X_train{idx(i_dx),1};
end
YValidation = Y_train(idx);
%%
numFeatures = 2; %看你的X_train中每个元胞有几行,就是几个特征
numHiddenUnits = 60;
numClasses = 6; %看你的Y_train中总共有几个类别
miniBatchSize=32;
layers = [ ... % 神经网络层
sequenceInputLayer(numFeatures) % 序列输入层 输入大小
lstmLayer(numHiddenUnits,'OutputMode','last') % lstm层 隐藏层层数
fullyConnectedLayer(numClasses) % 全连接层
softmaxLayer % softmax层
classificationLayer]; % 分类层
options = trainingOptions('adam', ... % 优化函数 rmsprop adam
'ExecutionEnvironment','gpu', ... % 执行环境 or gpu
'MaxEpochs',16, ... % 最大迭代次数
'MiniBatchSize',miniBatchSize,... % 最小迭代批量
'SequenceLength','longest', ... % 序列长度
'Shuffle','every-epoch',... % 数据打乱测量on
'GradientThreshold',3, ... % 梯度阈值
'InitialLearnRate',0.01,... % 初始学习率
'LearnRateSchedule','piecewise',... % 分段学习
'LearnRateDropPeriod',4,... % 学习率下降周期
'LearnRateDropFactor' , 0.1,... % 学习率降低系数
'Verbose',0, ... % 是否在命令行窗口显示
'ValidationData',{XValidation,YValidation},... % 验证集的绘制
'Plots','training-progress'); % 训练过程绘图
[net, info] = trainNetwork(X_train,Y_train,layers,options); % 开始训练
save ('net.mat',"net"); % 保存网络
%% 仿真数据的验证
Y_test=categorical(Y_test,[0,1,2,3,4,5],{'A','B','C','D','E','F'}); % 将Y_test改为分类数组,并将0-5和A-F对于更换
for i=1:length(X_test)
Y_Pred(i,1) = classify(net,X_test{i});
end
figure(1)
plotconfusion(Y_test,Y_Pred)
title('混淆矩阵')