12,294
edits
mNo edit summary |
|||
Line 1: | Line 1: | ||
== Processing == | == Processing == | ||
[[Image: | [[Image:processing env example.png|thumb|200px|Processing IDE]] | ||
[[Processing]] ist eine Programmiersprache und Entwicklungsumgebung, die 2001 am Massachusetts Institute of Technology von den Erfindern [http://benfry.com/ Ben Fry] und [http://reas.com/ Casey Reas] als quelloffenes Projekt ins Leben gerufen wurde. Die Sprache wurde speziell für die Bereiche Simulation und Animation entworfen und richtet sich daher vorwiegend an Personen aus der Gestaltung und Kunst. | [[Processing]] ist eine Programmiersprache und Entwicklungsumgebung, die 2001 am Massachusetts Institute of Technology von den Erfindern [http://benfry.com/ Ben Fry] und [http://reas.com/ Casey Reas] als quelloffenes Projekt ins Leben gerufen wurde. Die Sprache wurde speziell für die Bereiche Simulation und Animation entworfen und richtet sich daher vorwiegend an Personen aus der Gestaltung und Kunst. | ||
Line 9: | Line 9: | ||
== Neuronale Netze == | == Neuronale Netze == | ||
Da man in Processing direkt in Java programmieren kann, sind einem bzgl. der Komplexität der Programme keine Grenzen gesetzt. Für die einfache Erstellung neuronaler Netze kann man zusätzliche [http://processing.org/reference/libraries/ Libraries] verwenden, die man dem Sketchbook beifügt. Als Beispiel wird hier die [http://www.shiffman.net/teaching/nature/nn/ nn-library] von Daniel Shiffman verwendet. | Da man in Processing direkt in Java programmieren kann, sind einem bzgl. der Komplexität der Programme keine Grenzen gesetzt. Für die einfache Erstellung neuronaler Netze kann man zusätzliche [http://processing.org/reference/libraries/ Libraries] verwenden, die man dem Sketchbook beifügt. Als Beispiel wird hier die [http://www.shiffman.net/teaching/nature/nn/ nn-library] von Daniel Shiffman verwendet. | ||
Line 25: | Line 24: | ||
|} | |} | ||
Bei dem unten aufgeführtem Beispiel handelt es sich um eine leicht modifizierte Version eines neuronalen Netzes von Daniel Shiffman <ref>Daniel Shiffman: [http://www.shiffman.net/teaching/nature/nn/ The Nature of Code - Neural Networks]</ref>. Mittels eines [ | Bei dem unten aufgeführtem Beispiel handelt es sich um eine leicht modifizierte Version eines neuronalen Netzes von Daniel Shiffman <ref>Daniel Shiffman: [http://www.shiffman.net/teaching/nature/nn/ The Nature of Code - Neural Networks]</ref>. Mittels eines [[wikipedia:Multilayer perceptron]]s wird hier versucht das nichtlinear trennbare [http://en.wikipedia.org/wiki/Xor XOR Problem] zu lösen. Jede Ecke des Würfels entspricht einer 0 oder 1, wobei sich gleiche Werte je Fläche diagonal spiegeln, d.h. benachbarte Eckpunkte sind niemals beide gleichzeitig 0 oder 1, sondern immer im Wechsel. Zwischen 2 Eckpunkten wird entlang der Flächen interpoliert, sodass man für Werte zwischen 0 und 1 eine Annährung erhält. Zur Verdeutlichung wurde in den folgenden Beispielbildern als mögliches Antwortpaar für das Training via [[wikipedia:Backpropagation]] [0.2, 0.8] gewählt (siehe angepasste Wahrheitstabelle links). Damit wird dem Netz ein schnelleres Lernen ermöglicht, da die Ableitungen der [[wikipedia:Sigmoid function]] an diesen Stellen nicht allzu niedrig sind. Je weiter gen 0 und 1, desto niedriger werden die abgeleiten Werte (Anstieg der Tangenten an den jeweiligen Punkten) und desto weniger wird der Lernprozess beeinflusst, bzw. die Gewichte verändert. | ||
[[Image: | [[Image:processing neural network xor 1.png|thumb|left|100px|XOR possible state (1)]] | ||
[[Image: | [[Image:processing neural network xor 2.png|thumb|left|100px|XOR possible state (2)]] | ||
[[Image: | [[Image:processing neural network xor 3.png|thumb|left|100px|XOR possible state (3)]] | ||
[[Image: | [[Image:processing neural network xor 4.png|thumb|left|100px|XOR possible state (4)]] | ||
[[Image: | [[Image:processing neural network xor 5.png|thumb|left|100px|XOR possible state (5)]] | ||
<br clear="all" /> | <br clear="all" /> | ||
=== Anlegen eines neuronalen Netzes === | === Anlegen eines neuronalen Netzes === | ||
[[Image:neural network multilayer perceptron.png|thumb|200px|Multilayer Perceptron]] | |||
[[Image: | |||
Zunächst erzeugt man ein neues Netzwerk, für welches man vorgibt, wieviele input und hidden Neuronen enthalten sein sollen. Zusätzlich wird je Ebene intern ein BIAS Neuron angelegt (siehe Abbildung rechts). Nach Modifikation der Library wäre es ebenfalls möglich die Anzahl der Output-Neuronen zu bestimmen. Davon wurde hierbei jedoch abgesehen. | Zunächst erzeugt man ein neues Netzwerk, für welches man vorgibt, wieviele input und hidden Neuronen enthalten sein sollen. Zusätzlich wird je Ebene intern ein BIAS Neuron angelegt (siehe Abbildung rechts). Nach Modifikation der Library wäre es ebenfalls möglich die Anzahl der Output-Neuronen zu bestimmen. Davon wurde hierbei jedoch abgesehen. | ||
Line 46: | Line 44: | ||
=== Trainieren des neuronalen Netzes === | === Trainieren des neuronalen Netzes === | ||
In der setup() Methode initialisiert man einmalig die Eingabewerte (hier mit den ursprünglichen Werten 0 und 1 für das XOR Problem), welche im globalen [ | In der setup() Methode initialisiert man einmalig die Eingabewerte (hier mit den ursprünglichen Werten 0 und 1 für das XOR Problem), welche im globalen [[wikipedia:Variable (programming)#Scope and extent|Scope]], d.h. dem programmweiten Namensraum, zur Verfügung stehen. Dies bedeutet, dass jede erstellte Methode und instanziierte Klasse auf diese Variablen Zugriff hat. | ||
<source lang="java"> | <source lang="java"> | ||
Line 235: | Line 233: | ||
[[Category:Neuronales Netz]] | [[Category:Neuronales Netz]] | ||
[[Category:Processing]] | [[Category:Processing]] | ||
[[Category:Neuronales Netz]] | [[Category:Neuronales Netz]] | ||
[[Category:Processing]] | [[Category:Processing]] |