Ausgabe der Lernrate und des Netzfehlers im Trace Fenster
Posted: Tue 29. Oct 2013, 12:20
Hallo,
ich arbeite mich seit einer Weile in Membrain ein und versuche gerade, ein vorhandenes Skript etwas zu modifizieren.
Dabei versuche ich, das Skript dazu zu bringen, wenn ein gewisser Wert beim Netzfehler unterschritten wird, dass die Lernrate schrittweise kleiner wird.
(das "Mutterskript" ist das Basisscript, welches Trainingsdaten nimmt, dann validiert, und diese als .csv rauspeichert)
Um zu sehen, dass die Schleife korrekt durchlaufen wird, möchte ich den Wert der LEARNRATE und des GetNetError() im Trace fortlaufend pro Lesson angezeigt bekommen. Der Teachermanager zeigt mir den niedrigten Wert der LEARNRATE an nachdem es fertig durchgelaufen ist, aber ich würde die Schrittlängenänderung gerne sehen im Trace um sicherzugehen bzw. es später in einem File aufzeichnen.
Und irgendwie scheitere ich gerade an dem Punkt. Ich vermute, dass ich den Wert vom GetNetError() und der LEARNRATE in einen string umleiten muss, und dass dieser string in Trace reingehört
Wenn ich mein Testnetz richtig interpretiere, funktioniert das soweit, dass er die LEARNRATE reduziert wenn der NetError sinkt.
weiter hinten steht dann
Danke im Voraus für deine Hilfe
ich arbeite mich seit einer Weile in Membrain ein und versuche gerade, ein vorhandenes Skript etwas zu modifizieren.
Dabei versuche ich, das Skript dazu zu bringen, wenn ein gewisser Wert beim Netzfehler unterschritten wird, dass die Lernrate schrittweise kleiner wird.
(das "Mutterskript" ist das Basisscript, welches Trainingsdaten nimmt, dann validiert, und diese als .csv rauspeichert)
Um zu sehen, dass die Schleife korrekt durchlaufen wird, möchte ich den Wert der LEARNRATE und des GetNetError() im Trace fortlaufend pro Lesson angezeigt bekommen. Der Teachermanager zeigt mir den niedrigten Wert der LEARNRATE an nachdem es fertig durchgelaufen ist, aber ich würde die Schrittlängenänderung gerne sehen im Trace um sicherzugehen bzw. es später in einem File aufzeichnen.
Und irgendwie scheitere ich gerade an dem Punkt. Ich vermute, dass ich den Wert vom GetNetError() und der LEARNRATE in einen string umleiten muss, und dass dieser string in Trace reingehört
Wenn ich mein Testnetz richtig interpretiere, funktioniert das soweit, dass er die LEARNRATE reduziert wenn der NetError sinkt.
Code: Select all
double TAR_ERR_CHECK; // target net error
double LEA_RAT_START = 0.1; // The learning rate - start value, 0,01 bs 0,9 akzeptable Werte
double TAR_ERR_M1 = 0.1; // The target net error - step value - if Target Error goes below 0.1, the Learning Rate will be slower
double LEA_RAT_M1 = 0.05; // The learning rate - final value, 0,01 bs 0,9 akzeptable Werte
double TAR_ERR_M2 = 0.05; // The target net error - step value - if Target Error goes below 0.1, the Learning Rate will be slower
double LEA_RAT_M2 = 0.025; // The learning rate - final value, 0,01 bs 0,9 akzeptable Werte
double TAR_ERR_M3 = 0.03; // The target net error - step value - if Target Error goes below 0.1, the Learning Rate will be slower
double LEA_RAT_M3 = 0.011; // The learning rate - final value, 0,01 bs 0,9 akzeptable Werte
double TAR_ERR_FIN = 0.01; // The target net error - final value
string Lern_Rate = Double.toString(LEARNRATE);
string Netz_Fehler = Double.toString(TAR_ERR_CHECK);
Code: Select all
StartTeaching(); // Start teaching and wait for stop (target error reached)
TAR_ERR_CHECK = GetNetError();
if (TAR_ERR_M1 > TAR_ERR_CHECK)
{
TAR_ERR_CHECK_M1 = GetNetError();
TeacherSetting(LEARNRATE, LEA_RAT_M1);
if (TAR_ERR_M2 > TAR_ERR_CHECK)
{
TAR_ERR_CHECK_M2 = GetNetError();
TeacherSetting(LEARNRATE, LEA_RAT_M2);
if (TAR_ERR_M3 > TAR_ERR_CHECK)
{
TAR_ERR_CHECK_M3 = GetNetError();
TeacherSetting(LEARNRATE, LEA_RAT_M3);
}
}
}
SleepExec();