Che Guevara
13.02.2012, 23:37
Hallo,
da ich nun unter anderem einen genetischen Algo, einen Simulated Annealing Algo und ein boolsches Netz programmiert habe, wage ich mich jetzt an die Programmierung eines Neuronalen Netzes zur Mustererkennung (hier: Zahlenerkennung). Programmiert wird in vb.net. Jedoch habe ich ein paar Fragen:
1. Ich habe schon das halbe web durchsucht, wie man mit der Maus auf einer Picturebox zeichnen kann und anschließend das dann in ein Image laden... Das reine Zeichnen funktioniert, jedoch nur mittels des Graphics-Objektes. Diese Graphic müsste ich dann iwie in ein Bitmap bekommen, um die GetPixel Methode darauf anzuwenden. Aber wie?
2. Wenn ihr Lust & Zeit habt, könnt ihr den momentan Stand des Programms ausprobieren (im Anhang). Ihr könnt euch auch die Codes ansehen (bitte nicht beschweren, ist noch sehr unaufgeräumt...). Ein Bug besteht darin, dass wenn man die erste Zeile der Checkboxen als z.b. "0" definiert und die zweite Zeile als "1", und man markiert beide, so ergibt sich für den Output der Wert von +1 * anzahl der Lernzyklen für die "1", obwohl ja eigentlich 0 rauskommen müsste, da beide "0" und "1" gleichstark von den Rezeptoren aufgenommen werden und diese sich somit aufheben müssten... Vielleicht erkennt ja jemand den Fehler? Es scheint irgendwie, als wenn die linke obere Checkbox nicht richtig miteingerechnet wird.
3. Angenommen ich lerne die Darstellung der 1 10mal und die Darstellung der 2 1mal, dann wird, sofern beide vorhanden sind, die 1 bevorzugt, da die Gewichtungen der Synapsen höher sind. Gibt es da eine allg. gültige Vorgehensweise für Neuronale Netze oder wie macht man das, dass die Lernanzahl keine Rolle spielt? Über eine prozentualle Form?
4. Die Gewichtung der Synapsen erfolgt sehr primitiv, d.h. sobald eine Synapse auf den richtigen Output zeigt, wird ihr Wert um 1 erhöht, ansonsten um 1 verringert. Das ist sicherlich nicht optimal.... Kann mir jemand (evtl. an einem gut verständlichen Beispiel) die delta Regel erklären? Oder gibt es hier noch bessere "Bewertungsfunktionen"?
5. Fällt euch irgendetwas an dem Programm auf, das ihr Verbessern würdet (mal abgesehen von der äußeren Form und Darstellung)?
Ich weiß, viele Fragen auf einmal, aber ich denke, es wird hier einige Spezialisten geben, die dazu etwas sagen können.
Vielen Dank schonmal & Gruß
Chris
da ich nun unter anderem einen genetischen Algo, einen Simulated Annealing Algo und ein boolsches Netz programmiert habe, wage ich mich jetzt an die Programmierung eines Neuronalen Netzes zur Mustererkennung (hier: Zahlenerkennung). Programmiert wird in vb.net. Jedoch habe ich ein paar Fragen:
1. Ich habe schon das halbe web durchsucht, wie man mit der Maus auf einer Picturebox zeichnen kann und anschließend das dann in ein Image laden... Das reine Zeichnen funktioniert, jedoch nur mittels des Graphics-Objektes. Diese Graphic müsste ich dann iwie in ein Bitmap bekommen, um die GetPixel Methode darauf anzuwenden. Aber wie?
2. Wenn ihr Lust & Zeit habt, könnt ihr den momentan Stand des Programms ausprobieren (im Anhang). Ihr könnt euch auch die Codes ansehen (bitte nicht beschweren, ist noch sehr unaufgeräumt...). Ein Bug besteht darin, dass wenn man die erste Zeile der Checkboxen als z.b. "0" definiert und die zweite Zeile als "1", und man markiert beide, so ergibt sich für den Output der Wert von +1 * anzahl der Lernzyklen für die "1", obwohl ja eigentlich 0 rauskommen müsste, da beide "0" und "1" gleichstark von den Rezeptoren aufgenommen werden und diese sich somit aufheben müssten... Vielleicht erkennt ja jemand den Fehler? Es scheint irgendwie, als wenn die linke obere Checkbox nicht richtig miteingerechnet wird.
3. Angenommen ich lerne die Darstellung der 1 10mal und die Darstellung der 2 1mal, dann wird, sofern beide vorhanden sind, die 1 bevorzugt, da die Gewichtungen der Synapsen höher sind. Gibt es da eine allg. gültige Vorgehensweise für Neuronale Netze oder wie macht man das, dass die Lernanzahl keine Rolle spielt? Über eine prozentualle Form?
4. Die Gewichtung der Synapsen erfolgt sehr primitiv, d.h. sobald eine Synapse auf den richtigen Output zeigt, wird ihr Wert um 1 erhöht, ansonsten um 1 verringert. Das ist sicherlich nicht optimal.... Kann mir jemand (evtl. an einem gut verständlichen Beispiel) die delta Regel erklären? Oder gibt es hier noch bessere "Bewertungsfunktionen"?
5. Fällt euch irgendetwas an dem Programm auf, das ihr Verbessern würdet (mal abgesehen von der äußeren Form und Darstellung)?
Ich weiß, viele Fragen auf einmal, aber ich denke, es wird hier einige Spezialisten geben, die dazu etwas sagen können.
Vielen Dank schonmal & Gruß
Chris