Ich schreibe diesen Code für den Lernprozess von ANN (Mehrschicht-Backpropagation), aber das Ergebnis des Lernens ist sehr schlecht, es ist zu keiner Zeit nahe 1 Ich weiß, dass wir keine Garantie geben können, um erfolgreich zu lernen, aber ich möchte wissen, ob ich etwas Fehler in diesem Code mache oder ob ich diese Schritte mit mehr Leistung machen kann.Lernen von ANN in Matlab (Mehrschicht-Backpropagation)
Schritte:
1- Mein-Datensatz
2- 170 Zeilen aus 225 für das Lernen wählen, und der Rest 50 Zeilen für das Testen (zufällig)
3- schaffen Gewichte für Eingänge und versteckt Schichten zufällig zwischen 0 und 1
4- Bias für versteckte und Ausgang zwischen -1 und 1
5- finden die zufällig Schichten erstellen Ausgabe für jede für jeden Ausgang
6- Fehlersuche Zeile dann für jede versteckte Schicht
7- Aktualisierungs Gewichte und Bias-Arrays bei jeder Iteration
8- die Summation von quadratischen Fehler (MSE), berechnet auf jede Iteration.
Das Ergebnis für jeden Ausgang immer zwischen .2 und .5 auch nicht für die gewünschte Ausgabe. Was ist der mögliche Fehler bei meiner Logik oder bei meinem Code hier !!
Anmerkungen: 1- (Ich verwende Datensatz mit 225 Zeilen mit 108 Spalten und 25 Ergebnisse als Klassen) 170 Zeilen für das Lernen 55 Zeilen für das Testen
2- 50.000 Iterationen
3- Lernrate 0,3
4- Impulses = 0,7
5- verborgene Schicht ne. no = 90
Code:
%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