Zurück zum Inhaltsverzeichnis des Manuskripts

11 Trainieren des experimentellen Netzes

Lernschnittstelle lernPaare.txt

Bevor durch einen Aufruf des Skripts trainieren.ps1 mit dem Trainieren des Netzes begonnen werden kann, ist eine Benutzerschnittstelle (Lernschnittstelle) einzurichten. Sie wird durch die Textdatei lernPaare.txt im Daten-Verzeichnis realisiert. In dieser Datei, die ggf. erst noch erzeugt werden muss, sind Vektorpaare anzugeben, deren erster ein Eingabevektor und deren zweiter der zugehörige Zielvektor ist. Diese Paare werden beim Trainieren der Reihe nach abgearbeitet. Im Kapitel 14 (Programmauflistungen und Literaturhinweise) kann beispielhaft eine lernPaare.txt-Datei im PDF-Format abgerufen werden. Für ihren Aufbau gilt:

  1. Sie wird von der Funktion holeLernPaare des Skripts trainieren.ps1 ausgewertet und ist gültig, wenn sie wenigstens eine gültige Zeile enthält. Ist die Datei ungültig, wird dies gemeldet und die Auswertung abgebrochen.
  2. Eine Zeile der Datei ist gültig, wenn sie mit Wortlücken als Trenner genau zwei Vektoren enthält. Ungültige Zeilen werden ignoriert.
  3. Ein Vektor steht in runden Klammern. Seine Komponenten sind Kommazahlen zwischen 0,01 und 0,99 einschließlich. Das Komma ist Dezimaltrenner. Die Komponenten sind durch Wortlücken voneinander getrennt. Leere Vektoren führen zu ungültigen Zeilen.
  4. In gültigen Zeilen ist der erste Vektor Eingabe- und der zweite der zugehörige Zielvektor.

Eine minimale lernPaare.txt-Datei hat genau eine Zeile, die folgendermaßen aussehen könnte:

(0,99 0,01 0,99 0,01) (0,50 0,50)

Sie gehört zu einem Netz mit 4 Neuronen in der Ein- und 2 in der Ausgabeschicht. Ob es versteckte Schichten gibt, ist hier nicht erkennbar. Der Zeileninhalt fordert, dass das Netz so trainiert werden soll, dass bei Eingabe des Vektors (0,99 0,01 0,99 0,01) der Vektor (0,50 0,50) ausgegeben wird.

Lernschritte (runs)

Beim Aufruf des Skripts trainieren.ps1 wird die Anzahl der Lernschritte (runs) festgelegt, die angibt, wie oft die LernPaare aus der Datei lernPaare.txt abzuarbeiten sind. Diese Anzahl steht voreingestellt auf 1. Dieser Wert wird verwendet, wenn das Skript unparametrisiert aufgerufen wird. Wird beim Aufruf als Argument eine positive ganze Zahl angegeben, dann ist das die aktuelle Anzahl an durchzuführenden Lernschritten.

Vorbereitungsarbeiten

Das Skript beginnt mit einigen Vorbereitungsarbeiten. Zunächst wertet es die beim Einrichten des Netzes entstandene Datei matKonfig.kfg mit der aktuellen Matrizenbeschreibung aus. Danach kopiert es die ebenfalls beim Einrichten erzeugten Dateien mit den Startgewichten in Dateien mit den Namen gew0.mat, gew1.mat usw. Mit diesen Dateien arbeitet das Netz. Durch dieses Vorgehen wird erreicht, dass Experimentreihen mit dem Netz der Vergleichbarkeit wegen stets mit denselben Gewichten beginnen. Als Nächstes werden diese Gewichtsdateien eingelesen und in PowerShell-Matrizen, das sind zweidimensionale Double-Arrays, gespeichert.

Jetzt wird die Benutzerschnittstelle lernPaare.txt mit den zu erlernenden Paaren aus Eingabe- und zugehörigen Zielvektoren ausgewertet. Als letzte Vorbereitungsarbeit wird die Schrittweite alpha für den Gradientenabstieg aus der Konfigurationsdatei netzKonfig.txt gelesen. Der hier verwendete Wert von 0.1 ist ein Erfahrungswert und kann und soll in die Experimente eingehen. (Vgl. dazu das Buch von Rashid im Kapitel 14 (Programmauflistungen und Literaturhinweise).)

Skript trainieren.ps1

Das Trainieren selbst folgt dem hier als Pseudocode beschriebenen Schema:

foreach(run) { foreach(lernPaar) { propagiere den Eingabevektor durch alle Gewichtsmatrizen bilde den Fehlervektor propagiere den Fehlervektor durch die Gewichtsmatrizen zurück passe die Gewichte in den Matrizen an } }

Es ist nicht nötig, den Fehler auch über die Eingabeschicht zurückzupropagieren, weil es keine Gewichtsmatrix gibt, in die er eingehen könnte. Nach dem Trainieren des Netzes werden die Gewichtsmatrizen mit ihren jetzt modifizierten Gewichten in ihre ursprünglichen Dateien im Daten-Verzeichnis zurückgeschrieben und ersetzen diese.

Trainierbeispiel

Als Beispiel soll das im letzten Kapitel eingerichtete vierschichtige Netz trainiert und als Erstes die Datei lernPaare.txt mit einem Lernpaar belegt und in das Daten-Verzeichnis gebracht werden. Das Netz verlangt fünfstellige Eingabe- und siebenstellige Ausgabevektoren. Für das Trainierbeispiel erhält die Datei folgenden Inhalt:

(0,99 0,01 0,99 0,01 0,99) (0,01 0,99 0,01 0,99 0,01 0,99 0,01)

Dann wird das Netz mit 500 Lernschritten (runs) trainiert, und auch hier ist PS7> (mit einer Wortlücke am Ende) das Promptzeichen der PowerShell:

PS7> ./trainieren 500 Runs : 500 Gewichtsmatrizen : (6x5)+(6x6)+(3x6) Lernschnittstelle: 2 Vektorpaare Schrittweite : 0.1 Lernvorgang: beendet PS7>

Das Skript trainieren.ps1 und die von ihm verwendeten Funktionen im Skript netzFktn.ps1 können als PDF-Dateien im Kapitel 14 (Programmauflistungen und Literaturhinweise) abgerufen werden.



Zurück zum Inhaltsverzeichnis des Manuskripts