Matlab中基于LSTM的时序信号分类

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('混淆矩阵')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值