65
edits
Line 36: | Line 36: | ||
[[Image:neural_network_multilayer_perceptron.png|thumb|right|200px|Multilayer Perceptron]] | [[Image:neural_network_multilayer_perceptron.png|thumb|right|200px|Multilayer Perceptron]] | ||
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. | ||
<source lang="java"> | <source lang="java"> | ||
Network net = new Network(2,3); | Network net = new Network(2,3); | ||
</source> | </source> | ||
In der setup() Methode initialisiert man einmalig die Eingabewerte (hier mit den ursprünglichen Werten 0 und 1 für das XOR Problem): | === 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 in der global [http://en.wikipedia.org/wiki/Variable_(programming)#Scope_and_extent Scope] zur Verfügung stehen. | |||
<source lang="java"> | <source lang="java"> | ||
ArrayList inputs = new ArrayList(); | |||
void setup() { | void setup() { | ||
size(400, 400, OPENGL); | size(400, 400, OPENGL); | ||
Line 53: | Line 56: | ||
inputs.add(new float[] { 1, 1 }); | inputs.add(new float[] { 1, 1 }); | ||
} | } | ||
</source> | |||
Das Training wird randomisiert jeden Frame 5 mal wiederholt. Zunächst erfolgt... | |||
<source lang="java"> | |||
int rate = 5; | |||
for (int i = 0; i < rate; i++) { | |||
int pick = int(random(inputs.size())); | |||
float[] inp = (float[]) inputs.get(pick); | |||
float known = 0.8; | |||
if ((inp[0] > 0.5 && inp[1] > 0.5) || (inp[0] < 0.5 && inp[1] < 0.5)) known = 0.2; | |||
float result = net.train(inp, known); | |||
epoch++; | |||
} | |||
</source> | </source> | ||
edits