Flussdiagramm des Programms PERCEPT2.C






Da uns das Flussdiagramm inzwischen vertraut sein sollte, beginnen wir die Lösung der Aufgabe direkt mit einem Blick auf das Listing des Programms PERCEPT2.C. Hierbei sollten Sie sich klar machen, dass sich dieses Programm vom Programm PERCEPT1.C nur dadurch unterscheidet, dass man in der C-Funktion "veraendern" a priori die Anzahl der Trainingsdaten t sowie die maximal zu durchlaufende Anzahl von Trainingszyklen s_max angeben kann und somit die stets zu wiederholende Eingabe des Trainingsdatensatzes von Hand entfällt. Hier ist also die iterierte Perceptron-Lernregel im engeren Sinne implementiert, während sie in PERCEPT1.C nur implizit durch wiederholtes manuelles Eingeben simuliert werden kann. Dies hat allerdings auch sofort die Konsequenz, dass zwei x-Leseroutinen benötigt werden: eine zum Einlesen der im Ausführ-Modus zu testenden Eingabevektoren ("lese_test_x") und eine, ein Feld anlegende Routine zum Einlesen der x-Trainingsassoziationen ("lese_x"). Bisher konnte ja bei den Programmen LINASSOZ.C und PERCEPT1.C auf die Speicherung der x-Trainingseingänge verzichtet werden, so dass eine Leseroutine, nämlich "lese_x", ausreichend war. Ferner sollte man für das Verständnis des Programms wissen, dass in der C-Funktion "lernen" mit der Variablen s die durchlaufenen Lernzyklen gezählt werden und mit der Variablen err der im s-ten Zyklus vorhandene summierte absolute Fehler nachgehalten wird. Schließlich ist die Lernroutine durch einen kleinen Modulo-Trick so konstruiert, dass stets maximal 100 Lernzyklen auf dem Bildschirm dokumentiert werden (lokale Variable z). Abgebrochen wird die Lernroutine entweder durch fehlerfreies Arbeiten im Ausführ-Modus (err = 0) oder durch das Erreichen der Maximalzahl zulässiger Trainingszyklen ( s=s_max ).



Burkhard Lenze
Im Februar 2009