Frage zu Backpropagation (Neuronale Netze)

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Quadsoft.

    Frage zu Backpropagation (Neuronale Netze)

    Hallo,

    ich versuche mich gerade an OCR.
    Dafür generiere ich ein neuronales Netz mit 32 * 32 Input Neuronen und
    eine Hidden-Schicht mit 180 Neuronen und als letztes die Output Schicht mit 5 Output-Neuronen.

    Ziel ist ist, Zahlen zu erkennen.

    Das Backpropagation funktioniert_ soweit so gut, habe es getestet mit einem Input, randomisiert, und dem Target [1, 0, 0, 0, 0].. am Ende lief es dann irgendwie zu [0.99999, E-5, E-5, E-5, E-5]
    Problematisch wird es jedoch, wenn z.B zunächst mit 3 Test-Bildern der Zahl 1 trainiert wird also Target [1, 0, 0, 0, 0].. Target wird zwar erfüllt nach einer Weile..
    wird aber jetzt die Zahl 2 trainiert ( Target [0, 1, 0, 0, 0]) wird quasi dies mehr gewichtet, und das immer eher priorisiert...

    Das heißt:
    Gegeben sei ein Netzwerk und jeweils 3 Test-Bilder zu den Zahlen 1 und 2.
    1 wird zunächst erfolgreich eintrainiert, wird jedoch Zahl 2 trainiert, so ist dieses Training "frischer" und Eingaben die eigentlich 1 sein sollten, werden eher als 2 erkannt.
    Das es zumindest erfolgreich trainiert wird sieht man daran, dass wenn man eine 2 zeichnet, das Netz sich sehr sicher ist das es keine 1 ist ( negative Zahl für 1), zeichnet man nun eine 1, gibt das Netz als Output nun zwar immer noch für 1 das falsche
    Ergebnis, aber immerhin nah an das Ergebnis zu 2.


    Wie kann ich das Netzwerk trainieren, sodass am Ende alle Trainigs-Daten äquivalent eintrainiert bleiben?
    Ist ja klar das 2 dann eher erkannt wird, weil 2 nun mal als letztes trainiert wurde: Die "Erinnerung" daran ist frischer.

    Kennt jemand ein Kompromiss?
    Danke!
    Und Gott alleine weiß alles am allerbesten und besser.
    Wann machst du denn das Weight-Update? Ich nehme an, du hast stochastic gradient descent implementiert. Bei so kleinen Trainingsmengen wird der hier nicht wirklich gute ergebnisse liefern. Besser wäre es, den Fehlergradienten über alle Tranings-Beispiele zu bestimmen und dann nur ein Weight Update durchzuführen.