[未答复] 在利用MATLAB自带长短期记忆网络工具箱进行故障诊断时,验证集的loss函数一直向上走,如何调节参数呢

[复制链接]
shijingwen 发表于 2020-12-28 09:32:27
本帖最后由 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

这是程序代码[
  1. clc;clear;close all
  2. rng(0)
  3. load data_process1
  4. [XTrain,mapping]=mapminmax(train_X');
  5. XTest=mapminmax('apply',test_X',mapping);
  6. %转为cell格式
  7. train={};
  8. test={};
  9. for i=1:200
  10.     train{i,1}=XTrain(:,i);
  11. end
  12. for i=1:200
  13.     test{i,1}=XTest(:,i);
  14. end
  15. XTrain=train;
  16. XTest=test;

  17. YTrain=categorical(train_Y);
  18. YTest=categorical(test_Y);
  19. clear train_X train_Y test_X test_Y train test

  20. input_layer=size(XTrain{1},1);
  21. layers = [ ...
  22.     sequenceInputLayer(input_layer)
  23.     lstmLayer(50,'OutputMode','last')
  24.     lstmLayer(50,'OutputMode','last')
  25.     fullyConnectedLayer(4)
  26.     fullyConnectedLayer(4)
  27.     softmaxLayer
  28.     classificationLayer];
  29. options = trainingOptions('adam', ...
  30.     'ExecutionEnvironment','auto', ...
  31.     'MaxEpochs',30, ...
  32.     'InitialLearnRate',0.007, ...
  33.     'MiniBatchSize',50, ...
  34.     'GradientThreshold',1, ...
  35.     'Verbose',false, ...
  36.     'Plots','training-progress');
  37. % 需要看验证集的精度 就用下面这个
  38. options = trainingOptions('adam', ...
  39.     'ExecutionEnvironment','cpu', ...
  40.     'MaxEpochs',100, ...
  41.     'MiniBatchSize',50, ...
  42.     'GradientThreshold',1, ...
  43.     'Verbose',false, ...
  44.     'Plots','training-progress',...
  45.     'ValidationData',{XTest,YTest});
  46. net = trainNetwork(XTrain,YTrain,layers,options);
  47. %% 预测
  48. YPred = classify(net,XTest);
  49. %% 精确度检验
  50. acc = sum(YPred == YTest)./numel(YTest)
复制代码


一直调节神经元个数 网络层数 超参数 准确率最高达到79.5 normal_0_97.mat (3.72 MB, 下载次数: 2)
屏幕截图 2020-12-28 083508.png

48k_Drive_End_OR007@6_0_135.mat

3.72 MB, 下载次数: 2

48k_Drive_End_IR007_0_109.mat

3.72 MB, 下载次数: 1

48k_Drive_End_B007_0_122.mat

3.73 MB, 下载次数: 1

您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表