Bug in ScritedElements?

Dieses Forum beschäftigt sich mit allen Fragen, Kommentaren und Anregungen zu MemBrain Skripten. Auch der Austausch von Skripten zwischen MemBrain Benutzern soll hiermit gefördert werden.
Wenn Sie ein interessantes Skript haben, das Sie anderen MemBrain Benutzern zur Verfügung stellen wollen, dann Erstellen Sie dafür jeweils bitte ein neues Thema in diesem Forum. Der Titel des Themas sollte es anderen Benutzern erlauben möglichst schnell zu erfassen, wozu Ihr Skript dient.
MrNo
Posts: 28
Joined: Sun 19. Jan 2014, 08:36

Re: Bug in ScritedElements?

Post by MrNo »

N'Abend,
np, und kein Grund für eine Entschuldigung. Man machst sich in diesen Zeiten von Corona allerdings schon mal Gedanken wenn man nichts mehr hört. Kann ja jeden treffen...

Wenn eine neue Version da ist (eilt mir nicht) probier ich sie gerne aus.

LG
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Bug in ScritedElements?

Post by TJetter »

Nach erster Analyse ist es so, dass im Batch Mode des Teachers (bei RPROP gibt es sogar nur diesen, Stichwort kein Online-Training) die Berechnung des Netzfehlers nach jedem Trainingsschritt bereits stattfindet, bevor die während des Lesson Runs gesammelten Trainingsveränderungen tatsächlich Anwendung im Netz finden. Dementsprechend 'hinkt' der Netzfehler bim Batch Mode dem realen Trainingszustand des Netzes um jeweils einen Trainingsschritt 'hinterher'. Dies ist eine grundsätzliche Sache, die nicht nur die Funktion "Capture Best Net on Stock" betrifft, sondern generell die Anzeige des Netzfehlers und auch die Anzeigen im Pattern Error Viewer sowie das automatische Beenden des Trainings anhand des Netzfehlers: Wenn das Training beendet wird, dann ist das Netz immer schon einen letzten Trainingsschritt "weiter" als die Anzeigen und auch als die "Netzfehler-Benennung" im Net Stock.
In aller Regel hat das nur marginale Auswirkungen. Ich möchte es aber trotzdem im nächsten Release beheben. Ein Fix ist bereits vorbereitet und scheint gut zu funktionieren. Mehr Testen ist aber noch nötig und ich möchte eine andere Änderung beim Scripting ebenfalls noch in das Release packen. Es kann also noch ein wenig dauern bis das Update raus kommt.

Viele Grüße und Danke noch einmal für den Fehler-Report und die darauf verwendete Zeit!
Thomas Jetter
MrNo
Posts: 28
Joined: Sun 19. Jan 2014, 08:36

Re: Bug in ScritedElements?

Post by MrNo »

Hallo,

danke für die Info. Ich wollte noch eine Rückmeldung geben:

Die seit der letzten Version mögliche Einstellung welches Net gecaptchert (immer dieses Denglish ;) wird, finde ich sehr interessant. Ist meine nachfolgende Interpretation der Einstellungen richtig?

"By smallest absolute difference Net Error / Train Err":
- hier wird nur nach der absolute Differenz geschaut, auch wenn es eim Lernen Phasen gibt, bei denensowohl Net- als auch Train-Error gleichzeit absolut niedriger sind? Also das weggespeicherte Netz hat u.U. sowohl für Net Error als auch für Train Error schlechtere Werte als beim Lernen gefunden.

"By smallest mean value of Net Error and Train Err":
- Dies geschieht dann nach der Formel (NetError +TrainError)/2 ?
Das würde bedeuten, dass wenn beide Lessons sehr stark im Error auseinanderlaufen (also z.B. beim Überlernen), dass ein solches Netz ggf. das beste werden kann, oder?

Für mich wäre Folgendes interessant:
Es wird nur gecaptchert, wenn NetError und TrainError innerhalb eines gewissen Bereichs bleiben. Also z.B. innerhalb von 5% (am besten konfigurierbar).
Dann wird das Netz mit dem besten Mittelwert aus Net- und TrainError gespeichert. U.U würde dann überhaupt kein Netz gecaptchert, das wäre aber aus meiner Sicht ok. Dann geht weiter mit dem nächsten Randomize und Durchlauf....

Habe ich das grundsätzlich richtig verstanden und macht mein Vorschlag Sinn?

LG
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Bug in ScritedElements?

Post by TJetter »

MrNo wrote: Sat 30. Jan 2021, 20:15 Habe ich das grundsätzlich richtig verstanden
Ja, das ist so korrekt.
MrNo wrote: Sat 30. Jan 2021, 20:15 und macht mein Vorschlag Sinn?
Erste Einschätzung: Hört sich nach einem interessanten Vorschkag an, ja. Werde ich in Betracht ziehen für ein zukünftiges Release.

Viele Grüße
Thomas Jetter
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Bug in ScritedElements?

Post by TJetter »

So,

MemBrain Version 11.07.00.00 ist grade online gegangen, der Bug ist darin behoben.

Das neue Feature bzgl. der Auswahl des besten Netzes während des Trainings hat auch Eingang gefunden, danke nochmal für die Anregung!
Zusätzlich ist es dabei nun so, dass wenn das bislang beste Netz nicht innerhalb des Erwartungsfensters liegt (also prozentualer Abstand von Net Error zu Train Error), geprüft wird, ob das neue Netz diesem Kriterium näher kommt. In diesem Fall wird es zum neuen besten Netz erklärt.
Ebenso wird bei Train Error == 0 der prozentuale Abstand ignoriert (da er dann ja undefiniert ist) und nur nach dem besseren Net Error geprüft.
Das Feature (also die prozentuale Akzeptanzschwelle) ist natürlich einstellbar gehalten.

Der Remote Script Debugger hat nun außerdem die Möglichkeit zur Deaktivierung. Damit kann man Scripte editieren ohne dass sich der Debugger gleich automatisch an ein aktuell ausgeführtes Script anhängt. Es ist im "Debug" Menü des Debuggers auch einstellbar, ob beim Start des Debuggers ein austomatsiches Anhängen erfolgen soll oder nicht.

Viele Grüße,
Thomas Jetter
MrNo
Posts: 28
Joined: Sun 19. Jan 2014, 08:36

Re: Bug in ScritedElements?

Post by MrNo »

Hallo,

super, vielen Dank für die neue Version! Ich habe sie schon etwas ausprobieren können.
Die neue Funktion für das Wegspeichern des besten Netzes mit der prozentualen Angabe scheint gut zu funktionieren. Daaaaanke :D
Ich habe die Erklärung dazu gelesen, ganz habe ich sie nicht verstanden. Ist es so, dass wenn beide Netze während eines Trainingslauf nie innerhalb des Prozentbereichs liegen, dann trotzdem das bisher beste Ergebnis weggespeichert wird? Und sobald der Prozentbereich erreicht bzw. unterschritten wird, auf alle Fälle dann dieses Netz das (vorläufig) beste wird?

Und ich hatte noch einen komischen Effekt:
Ich habe die neue Version per Installer über die alte installiert. Dann habe ich einige Trainingsläufe gemacht. Das gemeldete Problem mit dem falschen Neterror in der StockManager Anzeige war aber geblieben. Ich habe dann mal 10 Einträge im Stockmanger überprüft. Nur bei 3en war der gleiche Wert wir mit Crtl-U nach Laden des Netzes aus dem Stockmanager.

Ich habe dann das Multithreading ausgeschaltet und trainiert. Der Fehler war weg. Dann habe ich das Multithreading wieder eingschaltet. Der Fehler blieb weg. Ich habe dann das Programm beendet und wieder gestartet. Weiterhin kein Fehler mehr. So richtig reproduzieren konnte ich es also nicht, und ob das Ausschalten des Multithreadings wirklich der Grund war, warum es danach ging kann ich auch nicht eindeutig sagen.

Egal, momentan geht alles. Falls ich den Fehler noch einmal sehe und reproduzieren kann, melde ich mich noch einmal.
Falls von Interesse: Ich habe einen Ryzen 3700X 8 Core.

Vielen Dank noch einmal und LG
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Bug in ScritedElements?

Post by TJetter »

Hallo,
MrNo wrote: Sat 6. Feb 2021, 21:40 Ich habe die Erklärung dazu gelesen, ganz habe ich sie nicht verstanden. Ist es so, dass wenn beide Netze während eines Trainingslauf nie innerhalb des Prozentbereichs liegen, dann trotzdem das bisher beste Ergebnis weggespeichert wird? Und sobald der Prozentbereich erreicht bzw. unterschritten wird, auf alle Fälle dann dieses Netz das (vorläufig) beste wird?
Wenn das bislang bekannte beste (am Anfang das initiale) Netz nicht im erforderlichen prozentualen Bereich (abs(NetErr - TrainErr)/TrainErr) liegt, dann wird das jetzt zu untersuchende Netz automatisch zum "besten" erklärt, wenn es diesem Kriterium näher kommt, also eine kleinere prozentuale Abweichung aufweist. Unabhängig von der absoluten Höhe der Fehler.
Sobald einmal die Abweichung erreicht wurde, muss jedes neue Netz innerhalb der Grenzen liegen, um in Frage zu kommen. Dann entscheidet der kleinere Mittelwert aus NetErr und TrainErr.

Das mit der anfänglichen Fehlerbeobachtung ist natürlich merkwürdig. Bitte berichten, wenn es doch wieder auftreten sollte. Korrekte Funktion sollte jetzt auch bei Mulithreading gegeben sein.
Allerdings gilt das Ganze prinzipbedingt immer nur bei zeitinvarianten Netzen, im Zweifelsfall Netzanalyse befragen.

Viele Grüße
Thomas Jetter
MrNo
Posts: 28
Joined: Sun 19. Jan 2014, 08:36

Re: Bug in ScritedElements?

Post by MrNo »

Hallo,

vielen Dank für die Erklärung.

Ich habe heute das Ganze noch einmal ausprobiert. Der Fehler, dass im Stock Manager ein falscher NetError angezeigt wird, ist immer noch da.
Ich habe ein zeitinvariantes Netz, also das kann es nicht sein.
Der Fehler tritt unterschiedlich stark auf. Ich habe bei "Multithreading On" (lesson based on) von 10 Trainingsläufen mal 9 mit richtiger Angabe im Stockmanager und ein anderes Mal nur 1 von 10 richtig. Und alles dazwischen gibts es auch. Für die Trainingsläufe habe ich einSkript, welches bei zu schlechtem NetError den Lauf abbricht und dann wieder ein neues Training startet Ich habe schon verschiedene Sachen ausporbiert, aber noch kein Muster gefunden warum es mal schlechter oder besser ist. Gestern abend meine ich, sogar bei "Multithreading off" sporadisch Fehler gesehen zu haben, das konnte ich aber heute nicht mehr nachstellen. Meine Beschreibung von gestern, dass man durch Aus- und Einschalten des Multithreadings einen Workaround hat, stimmt also so nicht. Da hatte ich nicht lange genug probiert.

Wenn ich ein wenig mehr Zeit habe, werde ich versuchen der Sache noch weiter auf den Grund zu gehen und ein Beispielnetz posten. Kann ein wenig dauern bis ich dazu komme...

LG
MrNo
Posts: 28
Joined: Sun 19. Jan 2014, 08:36

Re: Bug in ScritedElements?

Post by MrNo »

Hallo mal wieder,

so, heute habe ich mich dann doch mal wieder der Sache widmen können und nach einigem Ausprobieren ein Muster gefunden.
Scheinbar ist es so, dass es noch einen Versatz zwischen dem Wegspeichern im Stock Manager und der jeweils durchlaufenen Session gibt. Der fällt aber nicht sonderlich auf, wenn zwischen zwei Lessons der Net-Error kaum abweicht. Daher habe ich ein Mini-Beispielscript geschrieben, welches abwechselnd 500 und 2000 als Net-error zurückgibt. Wie im Screenshot zu sehen, ergibt ein aus dem Stock-Manager geladenes Netz, welches dort den Wert 2000 hat, bei Ctrl-U bei mir den Wert 500. Als Anhang ein Zip mit den Daten. Der Fehler tritt mit und ohne Multithreading auf. Wenn noch etwas fehlt bitte melden.
SShot_Beispiel_2013-03-13.PNG
(164.32 KiB) Not downloaded yet
Viele Grüße
Attachments
Beispiel_2013-03-13.zip
(6.98 KiB) Downloaded 350 times
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Bug in ScritedElements?

Post by TJetter »

Hallo, toll, das es weitergeht und schon mal vielen Dank für die Mühe!

Allerdings zeigt der vorliegende Fall kein Fehlverhalten:
- Während des Trainings wird das Netz dann weggespeichert, wenn es einen minimalen Netzfehler erreicht
- Die gescriptete Fehlerfunktion wird immer zuerst für den Trainingslauf aufgerufen (hier liefert sie 500) und dann für den Net Error Lauf (hier liefert sie dann immer 2000, weil es immer der zweite Lauf ist)
- Da beim automatischen "Capture" immer nur auf den Net Error geachtet wird, ist das ermittelte Minimum 2000
- Wenn also zum ersten Mal der Net Error (mit 2000) berechnet wird, dann wird das Netz auf dem Stock weggespeichert, zusammen mit der Info, dass der Net Error 2000 war
- Wenn nach dem Training das Netz vom Stock geholt und der Net Error manuell (Strg + U) berechnet wird, dann liefert die gescriptete Funktion wieder 500. Das tut sie beim manuellen Lauf immer: Hier wird die Scipting Engine immer neu gestartet und damit alle globalen Variablen neu initialisiert.
Deshalb sollte eine gescriptete Net Error Funktion keinen inneren Zustand (also globale Variablen) aufweisen. Sie sollte ihr Ergebnis alleine vom Verhalten des Netzes und den übergebenen Daten abhängig machen und nicht einen Netzfehler "erfinden", der mit dem Netz ja gar nichts zu tun hat. MemBrain reportet hier lediglich, was die Scriptfunktion zu diesem Zeitpunkt zurückliefert, mit dem Netz hat dieser Wert ja gar nichts zu tun. Woher sollte also die "2000" kommen?

Einverstanden? ;-)

Trotzdem nochmal vielen Dank für die Mühe! Vielleicht ist da ja trotzdem noch ein Bug, das würde ich niemals ausschließen wollen, Software hat grundsätzlich immer Fehler. Bei diesem Beispiel liegt allerdings keiner vor.

Viele Grüße
Thomas Jetter
Post Reply