Re: Anfängerfragen
Posted: Fri 1. Jan 2010, 11:42
Eine eingebaute Funktion gibt es hierfür nicht, nein.
Allerdings kann man ein solches Verhalten in einem Skript implementieren:
Währen des Lernens kann man über die Skriptfunktion 'GetNetError()' in einer Schleife den aktuellen Netzfehler abrufen und bei Erreichen eines neuen, interessanten Minimums das Netz abspeichern.
Allerdings muss man vor dem Abspeichern im Skript den Teacher erst anhalten und danach wieder starten (StopTeaching() bzw. StartTeaching()).
Bei manchen Teachern (z.B. RPROP) kann das bewirken, dass der Net Error kurzzeitig wieder ansteigt, das liegt an den Strategien, wie diese Lernalgorithmen arbeiten: RPROP passt während des Trainings z.B. automatisch die Schrittweite des Lernvorgangs an, deshalb ist er so schön unkompliziert zu parametrisieren. Das bedeutet im Umkehrschluss aber, dass dieser Algorithmus immer wenn er neu gestartet wird, seine (einstellbare) Standard-Schrittweite benutzt, die bei einem bereits vortrainierten Netz nicht optimal ist.
Der Netzfehler fällt dann aber normalerweise ganz schnell wieder ab und es geht da weiter, wo man aufgehört hat. Es kann sogar eine Chance sein, den RPROP ab und zu neu zu starten, da er bei jedem Start das Netz etwas 'durchschüttelt' und so lokale Minima verlassen bzw. überwunden werden können. Der Effekt kann aber auch umgekehrt sein, d.h., man verlässt ein Minimum und landet auf einem höheren Error-Plateau.
Wichtig bei einer längeren Schleife in einem Skript:
Man sollte nie so schnell wie möglich 'im Kreis rennen' in einem Skript, das Skript verbraucht sonst zu viel Rechenzeit und alles wird langsamer. Also in jeder Schleife, die länger läuft, ein kleines Sleep einbauen (z.B. Sleep(100)). Das gibt den verbleibenden Prozessen in MemBrain Zeit, ihre Arbeit zu tun, MemBrain bleibt damit auch besser bedienbar wenn ein Skript läuft.
Viele Grüße,
Thomas
Allerdings kann man ein solches Verhalten in einem Skript implementieren:
Währen des Lernens kann man über die Skriptfunktion 'GetNetError()' in einer Schleife den aktuellen Netzfehler abrufen und bei Erreichen eines neuen, interessanten Minimums das Netz abspeichern.
Allerdings muss man vor dem Abspeichern im Skript den Teacher erst anhalten und danach wieder starten (StopTeaching() bzw. StartTeaching()).
Bei manchen Teachern (z.B. RPROP) kann das bewirken, dass der Net Error kurzzeitig wieder ansteigt, das liegt an den Strategien, wie diese Lernalgorithmen arbeiten: RPROP passt während des Trainings z.B. automatisch die Schrittweite des Lernvorgangs an, deshalb ist er so schön unkompliziert zu parametrisieren. Das bedeutet im Umkehrschluss aber, dass dieser Algorithmus immer wenn er neu gestartet wird, seine (einstellbare) Standard-Schrittweite benutzt, die bei einem bereits vortrainierten Netz nicht optimal ist.
Der Netzfehler fällt dann aber normalerweise ganz schnell wieder ab und es geht da weiter, wo man aufgehört hat. Es kann sogar eine Chance sein, den RPROP ab und zu neu zu starten, da er bei jedem Start das Netz etwas 'durchschüttelt' und so lokale Minima verlassen bzw. überwunden werden können. Der Effekt kann aber auch umgekehrt sein, d.h., man verlässt ein Minimum und landet auf einem höheren Error-Plateau.
Wichtig bei einer längeren Schleife in einem Skript:
Man sollte nie so schnell wie möglich 'im Kreis rennen' in einem Skript, das Skript verbraucht sonst zu viel Rechenzeit und alles wird langsamer. Also in jeder Schleife, die länger läuft, ein kleines Sleep einbauen (z.B. Sleep(100)). Das gibt den verbleibenden Prozessen in MemBrain Zeit, ihre Arbeit zu tun, MemBrain bleibt damit auch besser bedienbar wenn ein Skript läuft.
Viele Grüße,
Thomas