Handschriften Erkennung mithilfe Künstlicher neuronaler Netz

Sie haben ein bestimmtes Projekt zu bearbeiten und wissen nicht, wie Sie an die Aufgabe heran gehen sollen? Sie sind sich nicht sicher, ob Ihr Netzentwurf zu Ihrem Problem passt oder ob es da Optimierungsmöglichkeiten gibt? Ist es überhaupt sinnvoll an Ihre Daten mit einem NN basierten Ansatz heranzugehen? Ist MemBrain das richtige Werkzeug für Ihr Problem und Ihre Infrastruktur?

Hier ist der richtige Platz für diese Art von Fragen.
targz
Posts: 7
Joined: Wed 26. Aug 2015, 21:21

Handschriften Erkennung mithilfe Künstlicher neuronaler Netz

Post by targz » Wed 26. Aug 2015, 21:40

Hallo,
Ich beschäftige mich jetzt schon längere Zeit mit dem oben genannten Thema und habe mich auch schon einige Zeit mit KNNs beschäftigt(bisher nur in der Theorie). Und komischer Weise habe ich heute das erste Mal vom MemBrain Simolator gehört/gelesen. :D Naja aber jetzt zu meinem eigentlichen Projekt.
Das ganze soll in Java realisiert werden, da ich das ganze später auch Smartphone tauglich machen will. Die Programmierung in Java sollte nicht das Problem sein, allerdings suche ich noch nach ein paar Antworten bezüglich des MemBrain Simulators. :) Und zwar habe ich mir das ganze so vorgestellt dass ich das Netz in MemBrain aufbaue, dann mein Trainingssatz durchlaufen lasse und dann die Gewichte in mein Java Netz übertrage. Somit spare ich mir den umständlichen Trainingsprozess in Java einzubauen.


1. Das Netz kann ich mit einem Script aufbauen, oder nicht? Ich werde 784 Input Neuronen haben.
2. Wenn das Netz Trainiert ist, gibt es einen Weg die Gewichte der einzelnen Units zu exportieren? am besten in eine .txt Datei

User avatar
TJetter
Posts: 318
Joined: Sat 13. Oct 2012, 12:04

Re: Handschriften Erkennung mithilfe Künstlicher neuronaler

Post by TJetter » Wed 26. Aug 2015, 22:17

Hallo,
targz wrote:Das Netz kann ich mit einem Script aufbauen, oder nicht? Ich werde 784 Input Neuronen haben.
Das ist zwar möglich, ja. EInfacher ist es aber manuell: Ein paar Neuronen platzieren, dann alles markieren und kopieren (Strg + 'A', Strg + 'C') und ein paar mal pasten (Strg + 'V').
Dann wieder alles markieren/kopieren und wieder ein paar Mal pasten. So hat man innerhalb von Sekunden tausende Neuronen erzeugt, das Ganze steigt sehr schnell exponentiell an.
Eine Auto-Benennung mit fortlaufender Nunmerierung im Nachhinein gibt es auch.
targz wrote:Wenn das Netz Trainiert ist, gibt es einen Weg die Gewichte der einzelnen Units zu exportieren? am besten in eine .txt Datei
Ja, Netze lassen sich als CSV-Dateien exportieren. Beim Export kann man auswählen, welche Informationen in die Datei einfließen sollen. Selbstverständlich gehören dazu auch Gewichte.
Ganz wichtig: Die 'Activation Thresholds' der Neuronen nicht vergessen.

Viele Grüße
Thomas Jetter

targz
Posts: 7
Joined: Wed 26. Aug 2015, 21:21

Re: Handschriften Erkennung mithilfe Künstlicher neuronaler

Post by targz » Thu 27. Aug 2015, 00:26

Hallo und vielen Dank für die schnelle Antwort.

Die Neuronen kann ich mit copy&paste erzeugen aber wie sieht es mit den links aus?

Als input bekomme ich von meinen trainingsset pro Bild ein großes array. Welche Formate kann membrain lesen? Ich vermute auch CSV oder?

Und jetzt noch eine Frage zur netzwerkstruktur: Ich hätte an ein dreistufiges Netz mit input, einer hidden, und output gedacht. Wie sieht es mit der Anzahl der Neuronen in der hiddenschicht aus? Was ist zu empfehlen?

targz
Posts: 7
Joined: Wed 26. Aug 2015, 21:21

Re: Handschriften Erkennung mithilfe Künstlicher neuronaler

Post by targz » Thu 27. Aug 2015, 13:33

Sooo
wie ich das mit dem input mache weiß ich jetzt(csv). Da werd ich mich jetzt mal ransetzen und versuchen die Daten der Trainingsmuster in CSV zu kriegen. Wenn das jemanden interressiert, ich benutze den MNIST Datensatz http://yann.lecun.com/exdb/mnist/
Wie sieht es mit den anderen beiden Sachen aus? Einmal wie kriege ich die Links zwischen den Neuronen gesetzt? Und welche Anzahl an hidden Neuronen erweißt sich als Sinnvoll?

User avatar
TJetter
Posts: 318
Joined: Sat 13. Oct 2012, 12:04

Re: Handschriften Erkennung mithilfe Künstlicher neuronaler

Post by TJetter » Thu 27. Aug 2015, 14:45

targz wrote:Einmal wie kriege ich die Links zwischen den Neuronen gesetzt?
Da gibt es sehr viele Möglichkeiten, die prominentesten:
- Wenn nur die Neuronen platziert und vom Typ her zugewiesen sind (Input/Hidden/Output):
<Edit><Connect...><Interconnect all layers downwards>

- Wenn man etwas mehr Flexibilität beim Erzeugen von Links haben will dann die Möglichkeiten im folgenden MemBrain Hilfe-Abschnitt lesen (F1):
"Links in MemBrain" - "Adding Links Between Neurons".

Letzteres macht in jedem Falle Sinn: MemBrain besitzt mit "Selection" und "Extra Selection" so mächtige Editierfähigkeiten, dass es es fast 'sträflich' ist, diese nicht halbwegs zu kennen - es lohnt sich ;-)
targz wrote:Und welche Anzahl an hidden Neuronen erweißt sich als Sinnvoll?
Experimentieren ist das einzige, was hier hilft.
Dabei klein anfangen, dend bei so vielen Input-Neuronen wird die Anzahl Links sehr schnell groß und die Sache damit vor allem beim Training sehr langsam.

Eine interessante Funktion könnte hier auch 'Matrix Connection' sein, findet sich ebenfalls in der Hilfe.

Viele Grüße
Thomas Jetter

User avatar
TJetter
Posts: 318
Joined: Sat 13. Oct 2012, 12:04

Re: Handschriften Erkennung mithilfe Künstlicher neuronaler

Post by TJetter » Thu 27. Aug 2015, 18:55

Hallo,

vor Jahren habe ich auch bereits einmal mit den MNIST Ziffern gearbeitet, siehe Screenshot auf der MemBrain Homepage, ganz unten auf der Seite oberes Bild links:
http://www.membrain-nn.de/german/details_de.htm
Dazu habe ich die Dateien mit einem kleinen C++-Programm in MemBrain Lessons konvertiert. Ich habe die konvertierten Dateien noch, ich schreibe gleich noch eine PN mit einem DropBox-Link dazu.
Das Paket enthält auch einige Netzentwürfe von mir von damals als ein wenig 'Starthilfe'.

Viele Grüße und viel Erfolg
Thomas Jetter

targz
Posts: 7
Joined: Wed 26. Aug 2015, 21:21

Re: Handschriften Erkennung mithilfe Künstlicher neuronaler

Post by targz » Thu 27. Aug 2015, 19:17

Hallo,
also ich muss schon sagen, der Support hier ist wirklich Spitze:) Ich werds mir gleich mal anschauen und mich dann wieder melden :D

targz
Posts: 7
Joined: Wed 26. Aug 2015, 21:21

Re: Handschriften Erkennung mithilfe Künstlicher neuronaler

Post by targz » Mon 31. Aug 2015, 04:09

Hallo,
ich bin nun mittlerweile dazu gekommen das Netz aufzubauen und zu trainieren. Ich verwende einen Hidden-Layer mit 15 Neuronen und als output 10 Neuronen(0...9). Wie ich in einem vorherigen Post bereits erwähnt hatte will ich das ganze Netz in Java implementieren. Dazu habe ich die relevanten Daten in eine .CSV exportieren lassen. Allerdings werden mir nicht die Namen der Neuronen sondern die jeweiligen IDs angezeigt. Leider habe ich keine IDs der Neuronen in Membrain selber finden können.

Vielen dank für eure bzw ihre Hilfe :)

User avatar
TJetter
Posts: 318
Joined: Sat 13. Oct 2012, 12:04

Re: Handschriften Erkennung mithilfe Künstlicher neuronaler

Post by TJetter » Mon 31. Aug 2015, 09:54

targz wrote:Allerdings werden mir nicht die Namen der Neuronen sondern die jeweiligen IDs angezeigt.
Beim Exportieren von Netzen in MemBrain erscheint ein Auswahldialog für die zu exportierenden Inhalte. Darunter gibt es auch 'Name', so dass die Namen mit exportiert werden.
Die Verknüpfungen beziehen sich dann allerdings auf IDs, da diese eindeutig sind. In MemBrain kann man diese nicht anzeigen lassen.
Aus der exportieren Neuronenliste im CSV kann man allerdings ersehen, welceh ID welchem Namen entspricht.

Grüße
Thomas Jetter

targz
Posts: 7
Joined: Wed 26. Aug 2015, 21:21

Re: Handschriften Erkennung mithilfe Künstlicher neuronaler

Post by targz » Wed 2. Sep 2015, 22:55

Hallo,
Erst einmal vielen Dank für die Antwort. Ich bin nun in letzter Zeit auch einige Schritte mit meinem kleinen Projekt vorangekommen.
Ich hätte da allerdings noch eine Frage zu dem Mnist Trainingset was sie mir freundlicherweise zukommen haben lasssen. Die Inputdaten liegen alle in einem Bereich zwischen 0 und 255. Ich vermute dass hierfür der Durchschnitt der jeweiligen RGB Werte genommen wurde. Liege ich mit meiner Annahme richtig?

Ps.: Mein Netz besteht momentan nur aus einer Input sowie Output Schicht. Auch hiermit lassen sich ganz akzeptable Ergebnisse erziehlen.

Post Reply