AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Backpropagation-Netz - Fehler- & Lernfunktion
Thema durchsuchen
Ansicht
Themen-Optionen

Backpropagation-Netz - Fehler- & Lernfunktion

Ein Thema von Maximus · begonnen am 5. Nov 2005
Antwort Antwort
Maximus

Registriert seit: 26. Okt 2003
169 Beiträge
 
#1

Backpropagation-Netz - Fehler- & Lernfunktion

  Alt 5. Nov 2005, 16:09
Hallo liebe DP'ler

Nachdem nun die Schulferien vorbei sind, konnt ich mein Projekt fertigstellen ein einfaches feedforward Backpropagation-Netz. Doch irgendwie lernt das Netz absolut nur Müll. Die Vermutung liegt jetzt nahe das irgendwas mit meiner Fehler- oder Lernfunktion nicht stimmt (diese zwei Punkte habe ich auch nicht 100% Verstanden). Jedoch nach mehrmaligen (ja so ca. 200 mal) durchlesen von diversen Seiten weiß ich einfach nicht weiter.

Das meiste hab ich von Uni Münster. Und so wie ich das dort aufgefasst habe müsste das Netz funktioniere ....

Erstmal ein paar Daten zum Netz:

Zuerst wird beim Training aus dem Eingabevektor ein Ausgabevektor berechnet, dannach wird der quadratische Fehler der Ausgabe bestimmt. Dies erledigt folgende Funktion für mich:

Delphi-Quellcode:
function TNeuralNet.CalculateNetError(AExpOutput, ARealOutput: TVector) : Double;
var i: Integer; // ExpOutput --> Expected Output ... RealOutput --> berechneter "wirklicher" Output
begin
 For i := 0 to FNumOutputs -1 do
  Result := Result + ((AExpOutput[i] - ARealOutput[i]) * (AExpOutput[i] - ARealOutput[i]));
 Result := 0.5 * Result;
end;
Wobei die Klasse TVector einfach zur besseren Handhabung einer TList da ist.

Sobald der Fehler einen bestimmten Wert überschreitet muss das Netz trainiert werden. Um das Netz zu trainieren brauch ich allerdings einen Fehler für jedes Neuron. Diesen berechne ich so (Ich schreib hier mal nur die Formel hin, da die Procedure etwas länger ist):

Delphi-Quellcode:
 //Für jedes Neuron der Ausgabeschicht
 Error := ExpOutput[i] - RealOutput[i];

 //Für jedes Neuron in den Hidden layers
 ANeuron.Error := ANeuron.Error + (Sigmoid(ANeuron.Output)) * (1- Sigmoid(ANeuron.Output) * (ATempNeuron.Error * ATempNeuron.Weights[j]);
Weights[j] gibt hierbei das Gewicht zwischen dem aktuellem und dem vorherigen Neuron an.

Sobald die Fehler berechnet sind, soll das Netz lernen. Und zwar mit dieser Formel (Ich benutze die Batch Version):

Delphi-Quellcode:
 If FCount = FBatchsize then
 begin
   ANeuron.Gradient[k] := ANeuron.Gradient[k] + ANeuron.Error * ATempNeuron.Output;
   ANeuron.Weights[k] := ANeuron.Weights[k] - (FLearningRate / FBatchsize) * ANeuron.Gradient[k];
 end
 Else
   ANeuron.Gradient[k] := ANeuron.Gradient[k] + ANeuron.Error * ATempNeuron.Output;
 end;
Ich muss zugeben diese Codeschnipsel sehen jetzt etwas kommisch aus, aber deswegen werd ich das komplette Projekt extra noch Anhängen

Ich wende mich mit dem Problem an die DP, weil ich hier schon einige Threads über das Thema gesehen habe, indem auch schon die ein oder anderen geschrieben haben sie würden sich mit soetwas beschäftigen.

Ich hoffe ihr könnt mir weiterhelfen! - Und wenn ich irgendwas vergessen habe hier zu erklären anzuführendas für eine Problemlösung relevant wäre mich bitte darauf aufmerksam zu machen!

MFG
Maximus
Angehängte Dateien
Dateityp: zip nnsimulation_163.zip (256,6 KB, 26x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz