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!
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.