Я пишу этот код для процесса обучения ANN (многослойное обратное распространение), но результат обучения очень плох, он не близок к 1 в любое время Я знаю, что мы не можем гарантировать какую-либо гарантию, чтобы сделать обучение успешным, но я хочу знать, если я что-то сделаю с ошибкой в этом коде или если я смогу сделать эти шаги с большей производительностью.Изучение ANN в Matlab (многослойное обратное распространение)
Шаги:
1- загрузить мой набор данных
2- выбрать 170 строк из 225 для обучения, а остальные 50 строк для тестирования (в случайном порядке)
3- создают веса для входов и скрытых слои случайным образом между 0 и 1
4- создать Bias для скрытых и выходных слоев случайным образом между -1 и 1
5- найти выход для каждой строки
6- ошибки находка для каждого выхода, то для каждого скрытого слоя
7- изменение веса и смещения массивов на каждой итерации
8- вычислить суммирование квадратичной ошибки (MSE) в каждая итерация.
Результат для каждого выхода всегда между .2 и .5 также не для желаемого выхода. Какая это возможная ошибка в моей логике или моем коде здесь!
Примечание: 1- (я использую набор данных 225 строк с 108 столбцами и 25 результатов как классы) 170 строк для обучения 55 строк для тестирования
2- 50000
окончания итерации3- обучения ставку 0,3
4- импульс = 0,7
5- скрытый слой пе. нет = 90
Код:
%Initialize the weight matrices with random weights
V = rand(inlayer,hlayer); % Weight matrix from Input to Hidden between [0,1]
W = rand(hlayer,olayer); % Weight matrix from Hidden to Output between [0,1]
%Initialize the theta matrices for hidden and output layers
Thetahidden = randi(1,hlayer);
Thetaoutput = randi(1,olayer);
for i=1:iteration
for j=1:170 % depends on training data set
%This for output between input-hidden
for h=1:hlayer % depends on neuron number at hidden layer
sum = 0;
for k=1:108 % depends on column number
sum = sum + (V(k,h)* trainingdata(j,k));
end
H(h) = sum + Thetahidden(h);
Oh(h) = 1/(1+exp(-H(h)));
end
%This for output between hidden-output
for o=1:olayer % depends on number of output layer
sumO = 0;
for hh=1:hlayer
sumO = sumO+W(hh,o)*Oh(hh);
end
O(o)=sumO + Thetaoutput(o);
OO(o) = 1/(1+exp(-O(o)));
finaloutputforeachrow(j,o)= OO(o);
end
% Store real value of real output
for r=1:170
for o=1:olayer
i=outputtrainingdata(r);
if i == o
RO(r,o)=1;
else
RO(r,o)=0;
end
end
end
sumerror =0;
% Compute Error (output layer)
for errorout=1:olayer
lamdaout(errorout) = OO(errorout)*(1-OO(errorout))*(RO(j,errorout)-OO(errorout));
errorrate = RO(j,errorout)-OO(errorout);
sumerror = sumerror+(errorrate^2);
FinalError(j,errorout) = errorrate;
% Compute Error (hidden layer)
ersum=0;
for errorh=1:hlayer
ersum= lamdaout(errorout)*W(errorh,errorout);
lamdahidden(errorh)= Oh(errorh)*(1-Oh(errorh))*ersum;
end
FinalSumError(j) = (1/2)*sumerror;
end
%update weights between input and hidden layer
for h=1:hlayer
for k=1:108
deltaw(k,h) = learningrate*lamdahidden(h)*trainingdata(j,k);
V(k,h) = (m*V(k,h)) + deltaw(k,h);
end
end
%update weights/Theta between hidden and output layer
for h=1:hlayer
for outl=1:olayer
%weight
deltaw2(h,outl) = learningrate * lamdaout(outl)*Oh(h);
W(h,outl)= (m*W(h,outl))+deltaw2(h,outl);
end
end
for h=1:hlayer
%Theta-Hidden
deltaHiddenTh(h) = learningrate * lamdahidden(h);
Thetahidden(h) = (m*Thetahidden(h)) + deltaHiddenTh(h);
end
for outl=1:olayer
%Theta-Output
deltaOutputTh(outl) = learningrate * lamdaout(outl);
Thetaoutput(outl) = (m*Thetaoutput(outl)) + deltaOutputTh(outl);
end
end
end