本帖最后由 shijingwen 于 2020-12-28 09:45 编辑
我有一个问题请教大家,如何调节LSTM自带工具箱的超参数和参数,先谢谢大家。
运行环境是MATLAB2019a
相应的数据见附件,第一个程序是数据处理 第二个是模型训练及诊断
% load 0HP/48k_Drive_End_B007_0_122; a1=X122_DE_time'; %1
% load 0HP/48k_Drive_End_IR007_0_109; a2=X109_DE_time'; %4
% load 0HP/48k_Drive_End_OR007@6_0_135 ;a3=X135_DE_time';%7
% load 0HP/normal_0_97 ;a4=X097_DE_time';%10
% save original_data a1 a2 a3 a4 %保存下来 下次直接调用
clear
load original_data
%%
N=100;
L=1024;% 每种状态取N个样本 每个样本长度为L
data=[];label=[];
for i=1:4
if i==1;ori_data=a1;end
if i==2;ori_data=a2;end
if i==3;ori_data=a3;end
if i==4;ori_data=a4;end
for j=1:N
start_point=randi(length(ori_data)-L);%随机取一个起点
end_point=start_point+L-1;
data=[data ;ori_data(start_point:end_point)];
label=[label;i];
end
end
%% 划分训练集 验证集与测试集 7:2:1比例
n=randperm(4*N);
m1=round(0.5*4*N);
train_X=data(n(1:m1),:);
train_Y=label(n(1:m1),:);
test_X=data(n(m1+1:end),:);
test_Y=label(n(m1+1:end),:);
save data_process1 train_X train_Y test_X test_Y
这是程序代码[
- clc;clear;close all
- rng(0)
- load data_process1
- [XTrain,mapping]=mapminmax(train_X');
- XTest=mapminmax('apply',test_X',mapping);
- %转为cell格式
- train={};
- test={};
- for i=1:200
- train{i,1}=XTrain(:,i);
- end
- for i=1:200
- test{i,1}=XTest(:,i);
- end
- XTrain=train;
- XTest=test;
- YTrain=categorical(train_Y);
- YTest=categorical(test_Y);
- clear train_X train_Y test_X test_Y train test
- input_layer=size(XTrain{1},1);
- layers = [ ...
- sequenceInputLayer(input_layer)
- lstmLayer(50,'OutputMode','last')
- lstmLayer(50,'OutputMode','last')
- fullyConnectedLayer(4)
- fullyConnectedLayer(4)
- softmaxLayer
- classificationLayer];
- options = trainingOptions('adam', ...
- 'ExecutionEnvironment','auto', ...
- 'MaxEpochs',30, ...
- 'InitialLearnRate',0.007, ...
- 'MiniBatchSize',50, ...
- 'GradientThreshold',1, ...
- 'Verbose',false, ...
- 'Plots','training-progress');
- % 需要看验证集的精度 就用下面这个
- options = trainingOptions('adam', ...
- 'ExecutionEnvironment','cpu', ...
- 'MaxEpochs',100, ...
- 'MiniBatchSize',50, ...
- 'GradientThreshold',1, ...
- 'Verbose',false, ...
- 'Plots','training-progress',...
- 'ValidationData',{XTest,YTest});
- net = trainNetwork(XTrain,YTrain,layers,options);
- %% 预测
- YPred = classify(net,XTest);
- %% 精确度检验
- acc = sum(YPred == YTest)./numel(YTest)
复制代码
一直调节神经元个数 网络层数 超参数 准确率最高达到79.5
normal_0_97.mat
(3.72 MB, 下载次数: 2)
|