SNNSv4.1 Re: Batchman examples for CC
(Që…ð@ÄØð@ÄÔ)
Sat, 5 Jul 97 18:53:39 +0200
Hello Humberto,
you want to have am exaple for training with CCA within batchman. Voila!
Komments are in german, beginning with a hash, in one line bevore the command
But consider, that there is no rule in this script controlling overtraining.
ciao manfred
Manfred Weber; Carolo Wilhelmina - Technische Universitaet zu Braunschweig
Institut fuer Datenverarbeitungsanlagen, Haus der Elektrotechnik - 1205
Hans-Sommer-Strasse 66, D - 38106 Braunschweig, Germany
Phone +49\531\391\3746
email manfred@ida.ing.tu-bs.de
#-----------------------------------------------------------------------------
# Kommentare muessen mit dem Zeichen Hash "#" beginnen; sie enden am Zeilenende.
#(/SNNSv4.1/tools/bin/sun_os4x/batchman -f /SNNSv4.1/session/bat_003 -l /SNNSv4.1/session/out_003) >& /SNNSv4.1/session/err_003 &
# Getrennte Umleitung der Standard-Fehlerausgabe bei der tc-Shell durch
# Gruppierung des Kommandos mit runden Klammern erzwingen:
# (<command> [<command_arguments>] > <standardout_file>) >& <error_file> [&]
# Aufruf: batchman -f inputfile -l outputfile
# -f inputfile := Das in dieser Datei angegebene Vorgehen wird abgearbeitet.
# -l outputfile:= Die Standardausgabe wird in diese Datei umgeleitet,
# Ausgaben von print(...) eingeschlossen.
#-----------------------------------------------------------------------------
# Muster-Datei Laden; die zuletzt geladene ist die aktuelle. Mit setPattern ("set.pat") wird die bereits geladene Musterdatei set.pat als aktuelle gewaehlt, d.h. die aktuelle wird mit dieser getauscht. Mit delPattern ("del.pat") wird die Muster-Datei del.pat geloescht. Alle drei Pattern-Funktionsaufrufe setzen die Systemvariable PAT auf den Wert der Anzahl der Muster in der zuletzt benutzten Musterdatei. Alle Dateinamen muessen absolut angegeben werden, also mit Pfad.
loadPattern ("/SNNSv4.1/chainpat/def.pat");
# Netz-Datei Laden (CYCLES wird dabei Null gesetzt):
loadNet ("/SNNSv4.1/003/start.net");
# Initialisierungsfunktion samt Parameter fuer Netz Setzen; gleichzeitig wird ein Netz-Reset (Zuruecksetzen der Werte auf Null) ausgefuehrt (ohne float-Werte: Standardwerte). Mit initNet() erfolgt "nur" eine Netzinitialisierung, d.h. ein definierter Startzustand durch Neusetzen der Variablen auf Zufallswerte (und zusaetzlich Ruecksetzung von CYCLES). (CC_Weights ruft Randomize_Weights auf!). Zum Initialisierungsintervall: SNNSv4.1-Manual, Seite 78: [a,b] und a>b. Alle Verbindungen muessen einen anderen Anfangswert haben, um eine Entwicklung in eine bestimmte Richtung hin zu unterdruecken.
#[setInitFunc ("CC_Weights", 1.0, -1.0)].
setInitFunc ("CC_Weights", 1.0, -1.0);
# Lernfunktion fuer Training Setzen (ohne float-Werte: Standardwerte).
#[setLearnFunc ("CC", 0.0001, 2.0, 0.0001, 0.0007, 2.0)]
setLearnFunc ("CC", 0.0001, 2.0, 0.0001, 0.0007, 2.0);
# Aktualisierungsfunktion fuer Einheiten Setzen (ohne float-Werte: Standardwerte).
setUpdateFunc ("CC_Order");
# Zufallsauswahl des naechsten Trainingsmusters (TRUE:= Ja; FALSE:= Nein):
setShuffle (FALSE);
# Pflicht fuer CC-Algorithmus! Default (snns2c unterstuetzt Act_LogSym nicht; SNNSv4.1-Manual, Seite S.258).
#[setCascadeParams (0.2,"Quickprop",TRUE,FALSE,"SBC",0.04,25,200,8,"Act_LogSym",0.01,50,200)].
setCascadeParams (0.002,"Quickprop",TRUE,FALSE,"SBC",0.004,50,400,8,"Act_TanH",0.001,50,400);
# Netz Initialisieren (Zuruecksetzen mit dem Funktionsaufruf setInitFunc()); noetig fuer nichtinitialisierte Netze (bereits trainierte sind initialisiert) zum Erzeugen eines definierten Startzustandes; entfaellt folglich bei initialisiertem Netz. CYCLES wird auf Null gesetzt. Vor Beginn muss Netz geladen sein! initNet() muesste die Parameter nehmen, die zuvor mit setInitFunc() gesetzt wurden. Mit [INIT] in XGUI werden die Werte der Verbindungsgewichte und das BIAS mit Zufalls-Werten aus dem Intervall [-1,+1] initialisiert.
initNet ();
# Systemaufruf execute(instruction,var1,var2,...) ermoeglicht eine Schnittstelle zum UNIX-Operation-System. Die Ausgaben der gestarteten Kommandos werden in das Batchprogramm umgeleitet, muessen in einer Zeile stehen und muessen durch ein Leerzeichen getrennt sein (notfalls AWK oder GREP zur Ausgabeformatierung benutzen). Die Ausgabewerte werden in der Ausgabereihenfolge den Variablen var1,var2,... zugewiesen. Ein Aufruf eines Batch-Interpreters ist auch moeglich.
execute ("date", one, two, three, four, five, six);
# print schreibt in die beim Programmaufruf mit "-l outputfile" angegebene Datei. Jeder Aufruf wird mit "Neue Zeile plus Zeilenvorschub" abgeschlossen.
print ("Startzeit: ",one," ",two," ",three," ",four," ",five," ",six);
# Statuszeile fuer die nachfolgend auszugebenden Variablen.
print ("CYCLES | SSE | SSEPU | MSE | MSE/OU");
# Ausfuehrungsschleife; moeglich sind: for, while, repeat.
for i := 1 to 2000 do
# Netztraining mit trainNet () Starten. Exakt ein Zyklus wird trainiert, d.h. dem Netz wird jedes Muster exakt ein mal praesentiert. Danach werden SSE, MSE, SSEPU und CYCLES aktualisiert. Keine weiteren Aufrufparameter. Aufruf erfolgt sinnvollerweise innerhalb einer Schleife, die Bedingung fuer das Training festlegt: Solange der Fehler kleiner als ein bestimmter Wert ist, starte einen neuen Trainingsdurchlauf. Sind Bedingungen erfuellt, speichere das kreierte Netz in einer Datei. Die Ergebnisse speichere in einer Ergebnisdatei. Nun breche den Prozess batchman ab oder mache weiter mit anderen Mustern und haenge die Ergebnisse an die bereits bestehende Datei an.
trainNet ()
# Zum Anzeigen des Fehlers trainierter Netze ohne Netztraining. SSE, MSE und SSEPU werden geaendert, das Netz jedoch nicht. Keine Aufrufparameter.
testNet()
# Ausgabe der Werte von Systemvariablen.
print (CYCLES," ",SSE," ",SSEPU," ",MSE," ",MSE/14);
endfor
# Resultate in Datei Schreiben. Die Resultatdatei enthaelt die Ergebnisse, wie das erstellt Netz auf jedes einzelne Muster reagiert. Wird ein Wert fuer die Parameter angegeben, muessen alle Parameterwerte angegeben werden. Syntax: saveResult("result.res",start,end,inclIn,inclOut,file_mode). start := Variable fuer erstes zu behandelndes Muster; end := Variable fuer letztes zu behandelndes Muster; inclIn := Eingangsmuster in result.res speicher (TRUE) | nicht speichern (FALSE); inclOut := Ausgangsmuster in result.res speichern (TRUE) oder nicht speichern (FALSE); fileMode := append (Anhaengen an bereits existente Datei oder create (Schreiben in neue Datei). Wird "PAT" anstelle von "start,end" angegeben, werden die Resultate aller Muster gespeichert.
saveResult ("/SNNSv4.1/session/003_res", 1, PAT, FALSE, FALSE, "create");
# Trainiertes Netz Sichern (das aktuelle im Simulatorkern).
saveNet ("/SNNSv4.1/session/003.net");
# Loeschen aller vom CCA erzeugten Kandidateinheiten.
delCandUnits();
# Trainiertes Netz Sichern (das aktuelle im Simulatorkern) - ohne Kandidateinheiten.
saveNet ("/SNNSv4.1/session/dcu.net");
# Systemaufruf Zielzeit:
execute ("date", one, two, three, four, five, six);
print ("Zielzeit: ",one," ",two," ",three," ",four," ",five," ",six);
# batchman Beenden. state ist der Rueckgabewert an den Aufrufer (meist die UNIX-Shell) und liegt im Intervall [-128,+127]. Ohne state wird Null zurueckgegeben. Nach diesem Aufruf darf nichts mehr stehen. Syntax: exit(state).
exit (123);