EpsiloNN Simulationsumgebung

Eine EpsiloNN Netzwerkspezifikation <filename>.nn kann mit nnmk <filename> übersetzt werden. Beim Übersetzen der EpsiloNN Netzwerkspezifikation wird zu den generierten C-Prozeduren ein einfacher Interpreter hinzugebunden, mit dem die Simulation des neuronalen Netzes kontrolliert werden kann. Beim Aufruf des aus dem Quellprogramm <filename>.nn generierten Programmes filename erscheint ein Prompt [<netname>] mit dem Namen der in <filename>.nn definierten Netzwerkklasse <netname>. Hier können verschiedene Befehle eingegeben werden:


Übersicht

Mit dem Befehl ? kann der folgende Hilfsbildschirm angezeigt werden :

Available commands:

addpat [<file_name>] (loads additional input patterns from file)
exit (ends the simulator session)
files (shows the current file assignments)
fxrnd [off|on] (truncate or round fix numbers)
ldnet [<file_name>] (loads the network from file)
ldpat [<file_name>] (loads the input patterns from file)
ldwts [<file_name>] (loads the weights from file)
methods (shows the network's public methods)
mixpat (creates a random order of patterns)
nopat (shows the current number of patterns loaded)
output [off|on|all] (changes the output mode)
setfil trc|res [<file_name>] (changes the trc/res file assignments)
silent off|on (deactivates/activates the silent mode)
source <file_name> (<file_name> is used as batch file)
svnet [<file_name>] (saves the network data into file)
svwts [<file_name>] (saves the weights to file)
trace [off|on|clear|string] (deactivate/activate the trace mode, remove/comment trace file)
? (displays this help screen)


Laden und Speichern von Netzwerken

Mit den beiden Kommandos svnet und ldnet können Netzwerke gespeichert bzw. geladen werden. Hierbei wird der komplette Netzzustand (d.h. alle Gewichtswerte und alle Aktivierungen sowie sonstige in den Klassen deklarierte private Variablen) in eine Datei geschrieben bzw. aus einer Datei geladen. Als Standardausgabe- bzw. -eingabedatei dient hier <netname>.net, wobei der Name <netname> wieder den Namen der aktuellen Netzwerkklasse bezeichnet. Um aus einer anderen Datei zu laden oder in eine andere Datei zu speichern, kann ein Dateiname als Parameter angegeben werden, wobei die Endung .net von der Simulationsumgebung automatisch hinzugefügt wird. Beachtet werden muß, daß eine Netzwerkdatei nur dann eingelesen werden kann, wenn die Datenstrukturen der Datei mit den Datenstrukturen des aktuellen Netzwerks übereinstimmen; es findet hier keine Anpassung statt. Wird eine inkompatible Netzwerkdatei geladen, so wird in der Regel mit einer Fehlermeldung abgebrochen. In seltenen Fällen kann auch erst zur Laufzeit ein Fehler auftreten.


Laden und Speichern von Gewichten

EpsiloNN bietet die Möglichkeit, die Gewichte eines Netzes mit svwts zu speichern bzw. mittels ldwts die Gewichte des Netzes zu laden. Als Gewichte werden von EpsiloNN diejenigen privaten synaptischen Variablen angesehen, die von einem der Gewichtstypen real_weight, int_weight, bool_weight oder fix_weight sind. Der Name der Datei, in die die Gewichte gespeichert bzw. aus der sie gelesen werden, ist standardmäßig <netname>.wts. Soll für die Gewichte eine andere Datei verwendet werden, so ist deren vollständiger Name als Parameter hinter svwts bzw. ldwts anzugeben (z.B. svwts my_weights.wts). Es werden zunächst alle Gewichte mit der Zielkoordinate 0 (d.h. die zum Neuron mit der Koordinate 0 führen) abgespeichert, wobei sie nachaufsteigender Quellkoordinate sortiert werden. Anschließend folgen die Gewichte der Neuronen mit den Koordinaten 1, 2, usw. Jeder Gewichtswert befindet sich in einer separaten Zeile der Gewichtsdatei. Sind mehrere Variablen mit der Kennzeichnung weight deklariert, so werden die Gewichtswerte in der Reihenfolge ihrer Deklaration in die Gewichtsdatei geschrieben. Vor jeder neuen Gewichtsmatrix wird eine Kommentarzeile der Form %<netname>:<synapse>.<variable> generiert. Mit ldwts können extern generierte Gewichtswerte in das Netz geladen werden, wenn sie in der Gewichtsdatei in der von EpsiloNN geforderten Reihenfolge (s.o.) abgelegt werden. Die Kommentarzeilen sind hierbei optional. Von den in EpsiloNN verfügbaren Topologien wird das Laden und Speichern von Gewichten nur bei full und one2one unterstützt. Für die übrigen Topologien wurden diese Funktionen noch nicht getestet.


Laden von Mustern

Die Muster werden mit ldpat aus einer Datei in den Hauptspeicher eingelesen. Wird ldpat ohne weitere Parameter aufgerufen, werden die Muster standardmäßig aus der Datei <netname>.pat eingelesen, wobei <netname> der Name des aktuellen Netzwerks ist. Sollen die Muster aus einer anderen Datei eingelesen werden, so kann der jeweilige Dateiname als Parameter beim Aufruf von ldpat angegeben werden. Hierbei kann jede beliebige Endung (nicht nur .pat) verwendet werden; die gewählte Endung muß stets mit angegeben werden. Durch einen erneuten Aufruf von ldpat mit einer anderen Musterdatei als Parameter werden die bisherigen Muster durch die neuen Muster ersetzt. Sollen dagegen die neuen Muster zusätzlich zu den bisherigen geladen werden, muß addpat verwendet werden. Für addpat gilt genau dasselbe wie für ldpat, nur daß die alten Muster nicht durch die neuen gelöscht werden. Mit dem Kommando nopat läßt sich die Anzahl der geladenen Muster abfragen.


Bildschirmausgabe

Mit dem Befehl silent on|off können Ausgaben auf den Bildschirm unterdrückt oder zugelassen werden. Wird silent on geschaltet, so verschwindet beispielsweise der Simulationsprompt und die Rückgabewerte von Funktionen werden nicht mehr angezeigt. Dies ist für den Batchbetrieb wichtig. Standardmäßig gilt silent off.


Skript-Dateien

Das Kommando source <filename> verwendet die Datei <filename> als Skript-Datei. Das heißt es werden alle Kommandos, die in <filename> aufgerufen werden ausgeführt. Der Unterschied zur Simulation im Batchbetrieb liegt darin, daß der Aufruf vom Simulationsprompt aus erfolgt und nach erfolgreicher Ausführung der Batch-Datei im Online-Modus weitergearbeitet werden kann.


Trace von Variablen

Mit trace on|off können die EpsiloNN Trace-Funktionen ein- oder ausgeschaltet werden, ohne daß an der Netzwerkspezifikation etwas geändert werden muß. Wird die Trace-Einrichtung deaktiviert, so finden keinerlei Ausgaben in die Trace-Datei mehr statt. Eine Geschwindigkeitseinbuße gegenüber demselben Programm ohne Trace-Befehle ist dann fast nicht mehr feststellbar. Beim erstmaligen Aufruf von trace on wird eine Trace-Datei mit dem gewünschten Namen generiert; bei wiederholtem Aufruf nach vorheriger Deaktivierung werden alle weiteren Ausgaben in die Trace-Datei an den bereits bestehenden Trace angehängt. Je nach Situation erhält man eine dementsprechende Meldung. Mit dem Kommando trace clear wird die Trace-Datei gelöscht. Dies ist nur bei ausgeschaltetem Trace-Modus möglich. Mit trace string <comment> wird die Zeichenette <comment> als Kommentar in Trace-Datei ausgegeben. Die Standardausgabedatei für den Trace-Modus ist <netname>.trc. Eine Änderung ist mit setfil trc <filename> möglich; bei bereits aktiviertem Trace-Modus wird die angegebene Datei sofort generiert. Auch hier sind beliebige Endungen des Dateinamens möglich; die Endung muß jedoch stets mit angegeben werden.


Ausgabemodi

Es gibt drei Ausgabemodi, die mit output off|on|all gesetzt werden. Der aktuelle Ausgabemodus legt fest, wie Aufrufe von write_outputs() in mehrfach auszuführenden Methoden (s. Kap. ) interpretiert werden. Mittels output off werden alle Ausgaben deaktiviert. Bei output on werden nur die Ausgabewerte für die letzte Epoche in die Ausgabedatei geschrieben (d.h. es gibt für jedes Muster der Musterdatei einen Ausgabevektor). Ist output all gesetzt, so werden die Ausgabevariablen des Netzwerks bei jedem Aufruf von write_outputs() in die Datei geschrieben. Der Standardmodus ist output on; der Standardname der Ausgabedatei ist <netname>.res. Um den Namen der Ausgabedatei zu ändern, ist setfil res <filename> einzugeben, wobei wiederum jede beliebige Endung möglich ist und eingegeben werden muß.


Dateien

Mittels des files Befehls ist eine Auflistung der aktuell gewählten Ein- / Ausgabedateien möglich. Dazu gehören die Datei, in der das Netzwerk gespeichert wird, die Musterdatei, die Trace-Datei und die Ergebnisdatei, sowie die Gewichtsdatei.


Protokolldatei

Beim Start der Simulationsumgebung wird eine Protokolldatei namens <netname>.log angelegt. Sie protokolliert die am Simulationsprompt gemachten Eingaben. Außerdem wird die Datei mit zwei Zeitstempeln versehen, mit denen der Anfang und das Ende der Sitzung festgehalten werden.


Methoden

Mit dem Kommando methods werden alle in der Klasse network spezifizierten öffentlichen Methoden angezeigt. Diese Methoden können mit ihrem Namen vom Interpreter aufgerufen werden. Sämtliche Parameter können hier auf der Kommandozeile vom Benutzer angegeben werden, so daß auf diese Weise Netzwerkparameter zur Laufzeit der Simulation geändert werden können. Um eine Methode mehrfach auszuführen, wird die Anzahl der Aufrufe als zusätzlicher Parameter übergeben, und zwar hinter allen anderen von der Methode erwarteten Parametern. Es ist zu beachten, daß die Parameter nicht geklammert werden. Die Trennung der einzelnen Parameter erfolgt durch (beliebig viele) Leerzeichen.


Methoden

Mit dem Kommando methods werden alle in der Klasse network spezifizierten öffentlichen Methoden angezeigt. Diese Methoden können mit ihrem Namen vom Interpreter aufgerufen werden. Sämtliche Parameter können hier auf der Kommandozeile vom Benutzer angegeben werden, so daß auf diese Weise Netzwerkparameter zur Laufzeit der Simulation geändert werden können. Um eine Methode mehrfach auszuführen, wird die Anzahl der Aufrufe als zusätzlicher Parameter übergeben, und zwar hinter allen anderen von der Methode erwarteten Parametern. Es ist zu beachten, daß die Parameter nicht geklammert werden. Die Trennung der einzelnen Parameter erfolgt durch (beliebig viele) Leerzeichen.


Reihenfolge der Muster ändern

Mit dem Befehl mixpat können die geladenen Muster in eine zufällige Reihenfolge gebracht werden. Um wieder die ursprüngliche Reihenfolge zu erhalten, müssen die Muster neu geladen werden.


Modus für Festkommaarithmetik

Das Kommando fxrnd zeigt den aktuellen Modus für die Festkommaarithmetik an. Mit fxrnd on kann dieser auf Runden, mit fxrnd off auf Abschneiden gesetzt werden. Standardmäßig ist Abschneiden gesetzt.


Weiterleitung von Shell-Kommandos

Die EpsiloNN-Simulationsumgebung erlaubt die Weiterleitung von Kommandos an die Shell des jeweiligen Betriebssystems. Dazu wird dem entsprechenden Befehl ein Hochkomma ( ' ) oder Ausrufungszeichen ( ! ) vorangestellt.


Simulation im Batchbetrieb

Der Ablauf einer Simulation kann in einer ASCII-Datei vorgegeben werden. Um den Batchbetrieb mit dieser Datei zu starten gibt es zwei Möglichkeiten. Die erste ist die Übergabe des Batchdateinamens als Parameter an die Simulation. Der Aufruf dafür lautet <filename> <batch_filename>. Die zweite Möglichkeit erfordert eine C-Shell (bzw. eine hierzu kompatible Shell). Der Batchbetrieb kann dann mit <filename> < <batch_filename> gestartet werden. Die beiden Alternativen weisen allerdings ein paar Unterschiede im Verhalten auf. Bei der erstgenannten Form (also der Übergabe des Batchdateinamens als Parameter) werden sämtliche Leerzeilen in der Batchdatei einfach ignoriert. Außerdem wird bei einem Aufruf von svnet (zum Speichern des Netzwerks) automatisch gespeichert. Es findet keine Rückfrage wie im Online-Modus statt, ob wirklich gespeichert werden soll. Ist die Batchdatei abgearbeitet, so geht die Simulation automatisch in den Online-Modus über, so daß der Benutzer weitere Eingaben am Simulationsprompt vornehmen kann. Bei der zweiten Form (der Eingabeumlenkung mit Hilfe der Shell) werden Leerzeilen wie im Online-Modus behandelt. Das heißt, es wird kein Kommando ausgeführt, sondern nur der Simulationsprompt neu angezeigt. Bei Aufrufen von svnet ist wie im Online-Modus die Nachfrage, ob gespeichert werden soll zu beantworten. Am Ende des Batchbetriebs schließlich kann nicht im Online-Modus weitergearbeitet werden, sondern die Simulation wird komplett beendet. Die nun folgenden Angaben sind für beide Formen des Batchbetriebs gültig. In der Batchdatei dürfen alle Befehle verwendet werden, die auch bei einer direkten Steuerung über den Simulationsprompt zur Verfügung stehen. Dabei ist für jedes Kommando eine eigene Zeile vorzusehen. Mit # oder % können Kommentare in die Datei eingefügt werden. Dabei gilt alles, was in einer Zeile hinter einem Kommentarzeichen steht als Kommentar. Um den Batchbetrieb zu beenden ist kein exit nötig. Der Name der Batchdatei ist beliebig. Der Inhalt kann z.B. wie folgt aussehen:

silent on % aktiviert den Silent-Modus
init # Netzwerk initialisieren
ldpat # Muster laden
% Lernrate setzen:
set_rate 0.8
learn 10000
svnet % Netzwerk speichern

init, set_rate und learn sind öffentliche Methoden aus der Klasse network des spezifizierten neuronalen Netzwerks. Das vorliegende Beispiel gilt für die Übergabe des Batchdateinamens als Parameter. Bei einer Eingabeumlenkung mit Hilfe der Shell müßte nach der letzten Zeile noch ein y eingefügt werden, damit das Netzwerk gespeichert wird.


Alfred Strey
Wed Nov 17 16:17:06 MET 1999