Aufgaben

Aufgabe: Zufällige Initialisierung

Die Funktion random, die mit from random import random importiert werden kann, liefert eine zufällige Zahl zwischen Null und Eins zurück. Passen Sie die Funktion create so an, dass die intern gespeicherten Gewichte und der Bias statt mit Null unabhängig voneinander mit zufälligen Zahlen zwischen Null und Eins initialisiert werden.

Aufgabe: Gesamtfehler und Trainingsfortschritt

Wir haben das Perzeptron fünf mal trainiert, bis es für alle betrachteten Beispiele die erwartete Ausgabe lieferte. Im Allgemeinen ist vorab nicht klar, wie lange wir das Perzeptron trainieren müssen, bis es fehlerfrei klassifiziert.

Definieren Sie eine Funktion total_error, die als ersten Parameter ein als Array dargestelltes Perzeptron erwartet, als zweiten Parameter ein Array von Trainingsbeispielen, und als Ergebnis den über alle Trainings-Beispiele akkumulierten Fehler liefert. Berechnen Sie dazu die Summe der Quadrate der Klassifizierungsfehler aller Trainings-Beispiele.

Passen Sie die Trainings-Schleife so an, dass ein weiterer Durchlauf mit allen Trainings-Beispielen durchgeführt wird, solange der Gesamtfehler größer als Null ist.

Bonusaufgabe: Grafische Darstellung eines Perzeptron mit zwei Eingaben

Ein Perzeptron mit zwei Eingaben können wir grafisch darstellen, indem wir die Ausgaben in einem geeignete Eingabe-Raster abtasten. Wenn wir die Eingabe-Werte als Koordinaten in einem 2-dimensionalen Koordinatensystem auffassen, und uns für beide Koordinaten auf einige Werte zwischen Null und Eins beschränken, können wir entsprechende Ausgaben des Perzeptrons im Terminal darstellen. Das oben trainierte Perzeptron würde wie folgt dargestellt, wenn wir für die x- und y-Koordinaten jeweils die Eingabewerte 0.0, 0.1, … 1.0 abtasten.

0  0  0  0  0  0  1  1  1  1  1
0  0  0  0  0  0  1  1  1  1  1
0  0  0  0  0  0  0  1  1  1  1
0  0  0  0  0  0  0  1  1  1  1
0  0  0  0  0  0  0  0  1  1  1
0  0  0  0  0  0  0  0  1  1  1
0  0  0  0  0  0  0  0  0  1  1
0  0  0  0  0  0  0  0  0  1  1
0  0  0  0  0  0  0  0  0  0  1
0  0  0  0  0  0  0  0  0  0  1
0  0  0  0  0  0  0  0  0  0  0

Wir können erkennen, dass das Perzeptron diesen Teil des Koordinatensystems durch eine trennende Gerade so in zwei Bereiche aufteilt, dass für die trainierten Beispiele die richtige Ausgabe erzeugt wird. Dass es durchaus mehrere Geraden mit dieser Eigenschaft gibt, können Sie bei Tests mit einem zufällig initialisierten Perzeptron beobachten.

Definieren Sie eine Prozedur display2d, die ein Perzeptron mit zwei Eingaben wie beschrieben abtastet und die gezeigte Darstellung im Terminal erzeugt.