Nachdem ich einige Artikel über neuronale Netze (Backpropagation) gelesen habe, versuche ich, selbst ein einfaches neuronales Netz zu erstellen.
Ich habe mich für ein neuronales XOR-Netz entschieden, Mein Problem ist, wenn ich versuche, das Netz zu trainieren, wenn ich nur ein Beispiel zum Trainieren des Netzes verwende, sagen wir 1,1,0(als input1,input2,targetOutput). nach 500 Zügen +- antwortet das Netzwerk 0,05. aber wenn ich mehr als ein Beispiel ausprobiere (sagen wir 2 verschiedene oder alle 4 Möglichkeiten), zielt das Netzwerk auf 0,5 als Ausgabe :( ich habe in google nach meinen fehlern gesucht, ohne ergebnis :S Ich versuche, so viele Details wie möglich zu geben, um den Fehler zu finden:
-ive hat Netze mit 2,2,1 und 2,4,1 (Eingabeschicht, versteckte Schicht, Ausgabeschicht) ausprobiert.
-die Ausgabe für jede neuronale definiert durch:
double input = 0.0;
for (int n = 0; n < layers[i].Count; n++)
input += layers[i][n].Output * weights[n];
wobei 'i' die aktuelle Schicht ist und die Gewichte alle Gewichte der vorherigen Schicht sind.
-Der Fehler der letzten Schicht (Ausgabeschicht) ist definiert durch:
value*(1-value)*(targetvalue-value);
wobei "Wert" die neuronale Ausgabe und "Zielwert" die Zielausgabe für die aktuelle neuronale Verbindung ist.
-Fehler für die anderen Neurale definiert durch:
foreach neural in the nextlayer
sum+=neural.value*currentneural.weights[neural];
-Alle Gewichte im Netz werden durch diese Formel angepasst (das Gewicht von neural -> neural 2)
weight+=LearnRate*neural.myvalue*neural2.error;
während LearnRate die neue Lernrate ist (bei meinem Netz auf 0,25 festgelegt). -Das Biasgewicht für jedes neuronale Netz ist definiert durch:
bias+=LearnRate*neural.myerror*neural.Bias;
bias ist const value=1.
Das ist so ziemlich alles, was ich sagen kann, wie ich schon sagte, die Ausgabe soll 0,5 mit verschiedenen Trainingsbeispielen sein :(
vielen Dank für Ihre Hilfe ^_^.