Anfängerfragen

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.
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Anfängerfragen

Post by Admin »

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
Thomas Jetter
schnurpel
Posts: 24
Joined: Fri 25. Dec 2009, 20:15

Re: Anfängerfragen

Post by schnurpel »

vielen dank, das hilft sehr weiter!

frage:

ich habe zum beispiel eine trainingsdatei im csv-format

in1;in2;in3;out1;out2

die outs sind zahlenwerte, auf die das netz tainiert wurde.

jetzt möchte ich das netz zur berechnung nutzen und in die outs, die ja ignoriert werden, strings statt zahlenwert einlesen.
ich brauche das unbedingt zur übersichtlichkeit um übertragungsfehler zu vermeiden.

wenn ich aber eine csv-datei mit strings in den out-feldern importiere, übernimmt das programm in das entsprechende out-feld eine 0 statt den string.
gibt es eine möglichkeit, daß der string übernommen wird?

vielleicht kann das ja über ein skript gelöst werden, daß die datei einliest, bereinigt an mem-brain übergibt und im trace-fenster die strings mit den korrelierenden ergebniswerten ausgibt?

viele grüße,
mk
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Anfängerfragen

Post by Admin »

Admin wrote:wenn ich aber eine csv-datei mit strings in den out-feldern importiere, übernimmt das programm in das entsprechende out-feld eine 0 statt den string.
gibt es eine möglichkeit, daß der string übernommen wird?
Nein, der Lesson-Editor kann keine Strings anstatt Zahlenwerten verarbeiten, er ist auf Zahlen beschränkt.
Admin wrote:vielleicht kann das ja über ein skript gelöst werden, daß die datei einliest, bereinigt an mem-brain übergibt und im trace-fenster die strings mit den korrelierenden ergebniswerten ausgibt?
In Skripten kann man beliebig auf Dateien zugreifen ja, dazu bietet die MemBrain-Implementierung von AngelScript die 'file' Klasse.
Allerdings muss dann alle Verarbeitung der eigentlichen Dateiinhalte im Skript geschehen, ein automatisierter Import ist dann nicht mehr möglich.

Was müsste denn ein solches Skript genau tun?

Viele Grüße
Thomas Jetter
schnurpel
Posts: 24
Joined: Fri 25. Dec 2009, 20:15

Re: Anfängerfragen

Post by schnurpel »

guten abend herr jetter!

das skript soll eine textdatei mit folgendem format übernehmen:

netz, name1, name2, input1, input2, input3, input4, input5, input6, input7, input8, output1, output2

dann soll das skript das entsprechende netz laden, das unter netz angegeben ist und diesem netz die inputs 1-8 für jede zeile (pattern) übergeben.
das netz soll dann die werte berechnen.

danach soll das skript die namen mit den entsprechenden ergebnissen im trace fenster, sowie in einer textdatei ausgeben.

viele grüße,
mk
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Anfängerfragen

Post by Admin »

Frage 1:
Könnten 'name1' und 'name2' auch am Ende der Liste stehen oder zumindest nach den Inputs?

Frage 2:
Steht hinter 'name1' und 'name2' eine überschaubare Menge an strings, die man über Zuordnung von Zahlen kodieren und im Skript wieder in Strings umwandeln könnte?
So könnte man anstatt der strings zahlen ins csv schgreiben, die dann in den Lesson Editor importiert werden können. Das Skript könnte aus diesen Zahlen über eine Tabelle wieder strings machen für das Trace-Fenster. Zur Ausgabe in eine Datei mit strings anstatt Zahlen wird man aber im Skript den Weg über direkten Dateizugriff gehen müssen. Dateiexport ist allerdings i.d.R. einfacher zu kodieren als eine Datei zu importieren.

Viele Grüße
Thomas Jetter
schnurpel
Posts: 24
Joined: Fri 25. Dec 2009, 20:15

Re: Anfängerfragen

Post by schnurpel »

Admin wrote:Frage 1:
Könnten 'name1' und 'name2' auch am Ende der Liste stehen oder zumindest nach den Inputs?

Frage 2:
Steht hinter 'name1' und 'name2' eine überschaubare Menge an strings, die man über Zuordnung von Zahlen kodieren und im Skript wieder in Strings umwandeln könnte?
So könnte man anstatt der strings zahlen ins csv schgreiben, die dann in den Lesson Editor importiert werden können. Das Skript könnte aus diesen Zahlen über eine Tabelle wieder strings machen für das Trace-Fenster. Zur Ausgabe in eine Datei mit strings anstatt Zahlen wird man aber im Skript den Weg über direkten Dateizugriff gehen müssen. Dateiexport ist allerdings i.d.R. einfacher zu kodieren als eine Datei zu importieren.

Viele Grüße
ja, da hatten wir die gleiche idde, genauso habe ich es gemacht, die strings ans ende gesetzt und codiert.
ist aber keine optimale lösung, da ich ungefähr 5000 verschiedener strings habe.

man kann das natürlich mit einer codierungsroutine jeweils umwandeln, da ich aber jetzt den weg der abfrage über mein vb-programm mit eingebundener dll gehe, wird sich das in kürze erledigen, denk ich, sobald der code denn nun endlich auch funktionert, was aber im moment eher ein vb-problem mit seinem bescheidenen datei-handling betrifft.
Post Reply