GMU:Neuronale Netze - eine Einführung für Künstler/Präsentation/Neuronale Netze in Pure Data: Difference between revisions
m (→Links) |
mNo edit summary |
||
Line 1: | Line 1: | ||
=Neuronale Netze in Pure Data= | =Neuronale Netze in Pure Data= | ||
[[Image:Pd-ann-objects.png|right|frame| | [[Image:Pd-ann-objects.png|right|frame|Pure Data ANN Objekte]] | ||
Neuronale Netze können in Pure Data mit Hilfe der ANN-Library realisiert werden. Die Library enthält drei Objekte: | Neuronale Netze können in Pure Data mit Hilfe der ANN-Library realisiert werden. Die Library enthält drei Objekte: | ||
* ann_mlp: Ein [http://de.wikipedia.org/wiki/Perzeptron#Mehrlagiges_Perzeptron Mehrlagiges Perceptronen] Netzwerk | * ann_mlp: Ein [http://de.wikipedia.org/wiki/Perzeptron#Mehrlagiges_Perzeptron Mehrlagiges Perceptronen] Netzwerk |
Latest revision as of 13:59, 26 May 2011
Neuronale Netze in Pure Data
Neuronale Netze können in Pure Data mit Hilfe der ANN-Library realisiert werden. Die Library enthält drei Objekte:
- ann_mlp: Ein Mehrlagiges Perceptronen Netzwerk
- ann_td: Ein Time Delay Netzwerk
- ann_som: Ein Implementation der Selbstorganisierenden Karten
Hier wird das Erstellen eines Neuronalen Netzes mit Hilfe des ann_mlp Objektes erklärt.
Generelles
Die Steuerung des ann_mlp Objektes geschieht durch Nachrichten. Das neuronale Netz hat als Eingabe eine Liste von float Werten. Alles was nicht aus float Werten besteht, muss erst in float Werte umgewandelt werden. Die Ausgabe des Neuronalen Netzes besteht ebenso nur aus float Werten.
Am besten ist es, Eingaben um 0 zu zentrieren, d.h. -1 bis 1 (zur Not kann man auch bei 0 beginnen) und nicht 12 bis 99.
Neuronale Netze müssen trainiert werden um zu funktionieren. Bevor man das Neuronale Netz benutzen kann, muss also erst einige Zeit darin investiert werden es zu trainieren. Tranierte Netze können gespeichert und geladen werden.
Erstellen des Netzes
Um ein mlp-Netz zu erstellen braucht man zuerst ein ann_mlp Objekt. Um das Netz aber auch wirklich zu erstellen, muss man dem ann_mlp Objekt eine Nachricht mit dem Wort "create" und mehreren Parametern übergeben. Folgende Parameter sind Möglich:
create <Anzahl Eingabeneuronen> <Anzahl Ausgabeneuronen> <Anzahl der Schichten> <Anzahl versteckte Neuronen> <Verbindungsrate> <Lernrate>
Die Anzahl der Eingabeneuronen und die Anzahl der Ausgabeneuronen müssen immer angegeben werden, die anderen Parameter sind optional.
Als Ausgabe in der Konsole sollte man jetzt folgende Ausgabe bekommen:
created ann with: num_input = 2 num_output = 1 num_layers = 3 connection_rate = 1.000000 learning_rate = 0.700000
Trainieren des Netzes
Um das Neuronale Netz zu trainieren muss man ihm die Nachricht "train" schicken. Das Netz wird damit in den Training-Modus versetzt, erkennbar an folgender Konsolenausgabe:
nn:training
Nachdem das Neuronale Netz in den Training-Modus versetzt wurde erwartet es eine Liste mit Eingaben und ihren gewünschten Ausgaben Wir werden hier als Beispiel das UND benutzen. Die Eingaben und Ausgaben dafür sind:
A | B | A und B |
1 | 1 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |
Dem Neuronalen Netz müssen diese vier Fälle beigebracht werden. Bei einem Neuronalen Netz genügt es nicht einfach alle Fälle einmal zu trainieren, sondern es muss alles so oft trainiert werden, bis der Fehler (MSE, rechtes Outlet) klein genug ist. Am besten trainiert man das neuronale Netz mit Hilfe eines Counters.
Sobald das Metronom angeschaltet wird, lernt das Neuronale Netz alle 10ms einen zufällig ausgewählten Fall. In den Nachrichten sind die Eingaben und Ausgaben hintereinander geschrieben. Man gibt also für jede Eingabe das gewünschte Ergebnis an. Je länger das Metronom läuft, desto kleiner sollte der Fehler werden. Ist der Fehler klein genug, kann die Lernphase abgeschlossen werden. Ab wann der Fehler klein genug ist, muss ausprobiert werden. Für ein einfaches Beispiel wie das logische UND, muss der Fehler nicht sehr klein sein um zu funktionieren.
Benutzen des Netzes
Ist das Netz trainiert, muss man es wieder in den normalen Modus versetzen. Dazu muss man den Neuronalen Netz die Nachricht "run" schicken. Folgende Konsolenausgabe sollte erscheinen:
nn: running
Im run-Modus erwartet das Neuronale Netz nur eine Liste mit Eingabe Werten, ohne Ausgabe Werte. Für das logische UND sind das also folgende:
1 1 1 0 0 1 0 0
Wenn das Neuronale Netz nun eine solche Eingabe bekommt, gibt es die entsprechend trainierten Ausgaben zurück. Die Ausgabe erscheint im linken Ausgang, hat man mehrere Ausgaben sind das alle Ausgänge bis auf das rechte. Der Vorteil eines Neuronalen Netzes liegt unter anderem darin, dass die Eingaben nicht genau sein müssen folgende Eingabe wird bei richtigen Training auch funktionieren:
0.9 0.1
Die Ausgabe des Neuronalen Netzes entspricht auch nicht immer genau derm trainierten Ausgabe Wert, meistens variert die Ausgabe ein wenig. Um dies zu umgehen müssen entsprechende Filter eingebaut werden (z.b mit < und >).
Netze wiederverwenden
Einmal trainierte Netze können wiederverwendet werden. Zum Speichern übergibt man dem Neuronalen Netz folgende Nachricht:
save <Dateiname>
Zum Laden eines Netzes übergibt man dem Neuronalen Netz diese Nachricht:
load <Dateiname>