WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Neuronales Netz - Backpropagation - XOR Beispiel

 

Friidayy
Forum-Century

Forum-Century


Beiträge: 225
Anmeldedatum: 17.12.13
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 11.12.2016, 12:56     Titel: Neuronales Netz - Backpropagation - XOR Beispiel
  Antworten mit Zitat      
Hallo Matlab-Community,

ich arbeite mich momentan in das Thema "Neuronale Netze" ein und möchte gerne den Backpropagation-Algorithmus in Matlab implementieren. Die NN-Toolbox möchte ich nicht benutzen. Beispielhaft teste ich den Algorithmus am XOR-Problem, leider funktioniert mein aktuelles Programm dafür nicht und ich sehe meinen Fehler nicht, habt ihr eine Idee woran es liegen könnte?

Ich habe mich bei der Programmierung an folgender Quelle orientiert:
https://www.youtube.com/watch?v=aVId8KMsdUU
https://www.youtube.com/watch?v=zpykfC4VnpM

Hierbei wird auf einfache Weise das Backpropagation hergeleitet. Im Anhang befinden sich die Folien als PDF. Auf der Letzten Seite (s. 4Cool ist der Algorithmus zusammengefasst, nach diesen Formeln habe ich mein Programm geschrieben.

Code:
function myXORexample
close all; clc;

maxIter=5e3;            % maximal number of iterations
eta=0.1;                % learningrate
T=[1 1 0; 0 1 1; 1 0 1; 0 0 0];     % training data, [input1 input2 target]
W=zeros(5,5);           % weightmatrix, wij node i connected to node j
W(1,3)=randn(1); W(1,4)=randn(1); W(2,3)=randn(1); W(2,4)=randn(1); W(3,5)=randn(1); W(4,5)=randn(1);   % random init
Theta=zeros(1,5);       % bias

% back propagation algorithm
errCount=zeros(1,maxIter);      % keep track of sum of squared errors
for i=1:maxIter
    idx=randi([1 size(T,1)-1]); % choose random training data
    O=evalNeuralNetwork(T(idx,1:end-1),W,Theta);
   
    dW=zeros(size(W));
    dTheta=zeros(size(Theta));
   
    d5=O(5)*(1-O(5))*(O(5)-T(idx,end));
    d3=O(3)*(1-O(3))*d5*W(3,5);
    d4=O(4)*(1-O(4))*d5*W(4,5);
   
    dW(1,3)=-eta*O(1)*d3;
    dW(1,4)=-eta*O(1)*d4;
   
    dW(2,3)=-eta*O(2)*d3;
    dW(2,4)=-eta*O(2)*d4;
   
    dW(3,5)=-eta*O(3)*d5;
    dW(4,5)=-eta*O(4)*d5;
   
    dTheta(3)=-eta*d3;
    dTheta(4)=-eta*d4;
    dTheta(5)=-eta*d5;
   
    W=W+dW;
    Theta=Theta+dTheta;
   
    E=0;        % eval sum of squared errors
    for v=1:size(T,1)
        tmp=evalNeuralNetwork(T(v,1:2),W,Theta);
        E=E+(T(v,end)-tmp(end))^2;
    end
    errCount(i)=E/2;
end

figure(1);
plot(errCount);

% compare training data and nn-output
for v=1:size(T,1)
    tmp=evalNeuralNetwork(T(v,1:2),W,Theta);
    tmp(end)
    T(v,end)
end


end


function O=evalNeuralNetwork(x,W,Theta)
    O=zeros(1,5);
    O(1:2)=x;
    x=[x zeros(1,length(W)-length(x))];
    z=x*W;
    z=logFunc(z+Theta); z(1:2)=0; z(end)=0;
    O(3:4)=z(3:4);
    y=z*W;
    y=logFunc(y+Theta); y(1:4)=0;
    O(5)=y(5);
end


function y=logFunc(x)
    y=1./(1+exp(-x));
end


BackPropagation.pdf
 Beschreibung:

Download
 Dateiname:  BackPropagation.pdf
 Dateigröße:  415.74 KB
 Heruntergeladen:  400 mal
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 11.12.2016, 15:56     Titel: Re: Neuronales Netz - Backpropagation - XOR Beispiel
  Antworten mit Zitat      
Hallo Friidayy,

Zitat:
leider funktioniert mein aktuelles Programm dafür nicht und ich sehe meinen Fehler nicht,

Bitte beschreibe noch, was genau nicht funktioniert und wie Du darauf kommst, dass ein Fehler vorliegt. Es ist leichter einen Fehler zu verbessern als zu erraten, wo er liegt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Friidayy
Themenstarter

Forum-Century

Forum-Century


Beiträge: 225
Anmeldedatum: 17.12.13
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 11.12.2016, 16:36     Titel:
  Antworten mit Zitat      
Hallo Jan,

ich sehe den Fehler bei der Berechnung der neuen Gewichte, bzw. deren Änderung dW und den Änderungen der Bias-Werte dTheta. Die Formeln aus der PDF wurden meiner Meinung nach aber richitg angewandt. Ggf. liegt der Fehler auch bei meinem Verständis, kann man das XOR Problem mit meiner gewählten Struktur überhaupt lösen? Brauche ich vllt. eine andere Aktivierungsfunktion oder mehr Neuronen?

Ich habe das Netz auch mal ohne Backpropagation und mit dem Optimierungssolver Fminunc trainiert. Ca. jedes 5-Mal wird das Netz dabei richitg trainiert und liefert die gewünschten Outputs. Daher auch meine Vermutung, dass es bei der Berechnung von dW und dTheta liegen muss.

Code:
function fminNNexample
close all; clc;

T=[1 1 0; 0 1 1; 1 0 1; 0 0 0];

W0=[randn(1,6) 0 0 0];
options=optimset('Display','iter');
p=fminunc(@(W)minFunc(W,T),W0,options);


W=zeros(5,5);
W(1,3)=p(1);
W(1,4)=p(2);
W(2,3)=p(3);
W(2,4)=p(4);
W(3,5)=p(5);
W(4,5)=p(6);
Theta=zeros(1,5);
Theta(3)=p(7);
Theta(4)=p(8);
Theta(5)=p(9);

for v=1:size(T,1)
    tmp=evalNeuralNetwork(T(v,1:2),W,Theta);
    tmp(end)
    T(v,end)
end


end


function E=minFunc(p,T)
W=zeros(5,5);
W(1,3)=p(1);
W(1,4)=p(2);
W(2,3)=p(3);
W(2,4)=p(4);
W(3,5)=p(5);
W(4,5)=p(6);
Theta=zeros(1,5);
Theta(3)=p(7);
Theta(4)=p(8);
Theta(5)=p(9);

E=0;
for v=1:size(T,1)
    tmp=evalNeuralNetwork(T(v,1:2),W,Theta);
    E=E+(T(v,end)-tmp(end))^2;
end
E=E/2;
end

function O=evalNeuralNetwork(x,W,Theta)
O=zeros(1,5);
O(1:2)=x;
x=[x zeros(1,length(W)-length(x))];
z=x*W;
z=logFunc(z+Theta); z(1:2)=0; z(end)=0;
O(3:4)=z(3:4);
y=z*W;
y=logFunc(y+Theta); y(1:4)=0;
O(5)=y(5);
end

function y=logFunc(x)
y=1./(1+exp(-x));
end
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.