필터 지우기
필터 지우기

Trying to get 80% and greater accuracy from network. Can someone help in editing my code to reach to 80% or close too?

조회 수: 1 (최근 30일)
clc; clear all; close all;
load generated_data.mat
% 2289*180
% 6 classes
X1_T = X1';
rand('seed', 0)
ind = randperm(size(X1_T, 1));
X1_T = X1_T(ind, :);
Y1 = categorical(Y1(ind));
% Split Data
X1_train = X1_T;
train_X1 = X1_train(1:120,:);
train_Y1 = Y1(1:120);
% Data Batch
XTrain=(reshape(train_X1', [2289,120]));
val_X1 = X1_train(121:150,:);
val_Y1 = Y1(121:150);
XVal=(reshape(val_X1', [2289,30]));
test_X1 = X1_train(151:180,:);
test_Y1 = Y1(151:180);
XTest=(reshape(test_X1', [2289,30]));
numFeatures = size(X1_T,2);
% number of hidden units represent the size of the data
numHiddenUnits = 180;
%number of classes represent different patients normal,LIS,type2....
numClasses = length(categories(categorical(Y1)));
layers = [ ...
sequenceInputLayer(numFeatures)
dropoutLayer(0.1)
bilstmLayer(numHiddenUnits,'OutputMode','sequence')
fullyConnectedLayer(numClasses)
instanceNormalizationLayer
softmaxLayer
classificationLayer];
options = trainingOptions('sgdm', ...
'MaxEpochs',150, ...
'GradientThreshold',1, ...
'Verbose',false, ...
'ValidationData',{XVal, val_Y1},...
'LearnRateDropFactor',0.2,...
'LearnRateDropPeriod',5,...
'Plots','training-progress');
% Train
net = trainNetwork(XTrain,train_Y1,layers,options);
% Test
miniBatchSize = 27;
YPred = classify(net,XTest, ...
'MiniBatchSize',miniBatchSize,...
'ExecutionEnvironment', 'cpu');
acc = mean(YPred(:) == categorical(test_Y1(:)))
figure
t = confusionchart(categorical(test_Y1(:)),YPred(:));
  댓글 수: 2
Nathaniel Porter
Nathaniel Porter 2021년 12월 16일
My validation accuracy at highest(without the InstanceNormalizationLayer) is 67.77% but I am currently trying to improve it to roughly 80%. Just asking if my code be manipulated currently to achive this number ?

댓글을 달려면 로그인하십시오.

채택된 답변

yanqi liu
yanqi liu 2021년 12월 16일
편집: yanqi liu 2021년 12월 16일
yes,sir,may be use
clc; clear all; close all;
load generated_data.mat
% 2289*180
% 6 classes
rand('seed', 0)
X1_T = X1';
YC1 = categorical(Y1);
CS = categories(YC1);
train_index = []; val_index = []; test_index = [];
for i = 1 : length(CS)
indi = find(YC1==CS{i});
% Shuffling data
indi = indi(randperm(length(indi)));
% 2/3---train, 1/6---val, 1/6---test
index1 = round(length(indi)*2/3);
index2 = round(length(indi)*(2/3+1/6));
train_index = [train_index indi(1:index1)];
val_index = [val_index indi(1+index1:index2)];
test_index = [test_index indi(1+index2:end)];
end
ind = [train_index val_index test_index];
X1_T = X1_T(ind, :);
Y1 = categorical(Y1(ind));
% Split Data
X1_train = X1_T;
train_X1 = X1_train(1:120,:);
train_Y1 = Y1(1:120);
% Data Batch
XTrain=(reshape(train_X1', [2289,120]));
val_X1 = X1_train(121:150,:);
val_Y1 = Y1(121:150);
XVal=(reshape(val_X1', [2289,30]));
test_X1 = X1_train(151:180,:);
test_Y1 = Y1(151:180);
XTest=(reshape(test_X1', [2289,30]));
numFeatures = size(X1_T,2);
% number of hidden units represent the size of the data
numHiddenUnits = 500;
%number of classes represent different patients normal,LIS,type2....
numClasses = length(categories(categorical(Y1)));
layers = [ ...
sequenceInputLayer(numFeatures)
%dropoutLayer(0.5)
instanceNormalizationLayer
bilstmLayer(numHiddenUnits,'OutputMode','sequence')
%dropoutLayer(0.5)
instanceNormalizationLayer
bilstmLayer(round(numHiddenUnits/2),'OutputMode','sequence')
fullyConnectedLayer(numClasses)
instanceNormalizationLayer
softmaxLayer
classificationLayer];
options = trainingOptions('sgdm', ...
'MaxEpochs',100, ...
'GradientThreshold',1, ...
'Verbose',false, ...
'ValidationData',{XVal, val_Y1},...
'LearnRateDropFactor',0.2,...
'LearnRateDropPeriod',5,...
'Plots','training-progress');
% Train
net = trainNetwork(XTrain,train_Y1,layers,options);
% Test
miniBatchSize = 27;
YPred = classify(net,XTest, ...
'MiniBatchSize',miniBatchSize,...
'ExecutionEnvironment', 'cpu');
acc = mean(YPred(:) == categorical(test_Y1(:)))
figure
t = confusionchart(categorical(test_Y1(:)),YPred(:));
acc =
0.9667
>>
  댓글 수: 2
Nathaniel Porter
Nathaniel Porter 2021년 12월 16일
Hey I would like to know what was exactly done at the begining of the code with the 'for' loop?
yanqi liu
yanqi liu 2021년 12월 17일
yes,sir,we know it is 6 classes,so just for every class,we choose 2/3、1/6、1/6 as train、val、test data,through this method,we can get the data split index

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Custom Training Loops에 대해 자세히 알아보기

제품


릴리스

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by