Übungsscript

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.
Post Reply
Michal
Posts: 10
Joined: Fri 21. Jan 2011, 19:23

Übungsscript

Post by Michal »

Hallo,

ich möchte ein trainiertes Netz im script mehrfach verwenden, bzw. mit anderen Eingabewerten belegen. Die Eingabewerte vom nachfolgendem Netz (welches identisch mit dem Vorgänger ist) resultieren aus den Eingabewerten des ersten Netzes und den Ausgabewerten des ersten Netzes.
Beigelegtes Schema bringt evtl. Klarheit in meine Ausführungen.
Dies soll nur als ein Test dienen, in der Tat sollen mehrere solche Netze nach dem gleichen Schema folgen.
Ich habe mir vorgestellt das trainierte Netz mit den Eingangswerten zu belegen (nach dem Validierungschema), Ausgabe speichern und dann im zweiten Schritt diese CSV Datei wieder aufrufen und als Eingang des zweiten Netzes belegen.
Meine Kenntnisse der Scripterstellung liegen auf dem Niveau des Beispiels Validierung, aleso weniger als die des Anfängers.
Ist die Strategie gut?
Wie mache ich die Substraktion der Werte 1_INP_1 minus 1_OUT_1 ?
Vielleicht kann jemand eine solche Schleife helfen zu programmieren?
Vielen Dank

Michal
Michal
Posts: 10
Joined: Fri 21. Jan 2011, 19:23

Re: Übungsscript

Post by Michal »

Hier jetzt mit Anhang :oops:
Michal
Attachments
Layout.png
(38.73 KiB) Not downloaded yet
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Übungsscript

Post by Admin »

Hallo,

anbei eine Beispielimplementierung mit Script so wie ich die Anfrage verstanden habe.

Zu Beginn des Scriptcodes lassen sich in den Konstanten Einstellungen vornehmen bzgl. Anzahl der Netze, Namen der Dateien etc.

Das Paket enthält auch drei (bis auf die Gewichte identische und zweckfreie) Netze sowie eine CSV-Datei als Input (ebenfalls ohne jegliche praktische Bedeutung).
Das zip file in einem eigenen Ordner entpacken und dann einfach das Script ("CombinedNets.as") in MemBrain über das Menü 'Scripting --> Execute Script' ausführen.

Ich habe reichliche Kommentare eingefügt, ich hoffe, damit wird deutlich, was im Einzelnen wo passiert. Am Ende werden die finalen Outputs des letzten Netzes zusammen mit den Originalinputs als CSV exportiert.

Wichtig ist auch die Konstante 'USE_ORIGINAL_INPUTS_FOR_COMBINE' oben im Script. Hierüber lässt sich einstellen, ob die Inputs bei der Kombination mit den Outputs des vorherigen Netzes immer wieder neu aus der Original Inputdatei geladen werden sollen oder nicht.

Bei weiteren Fragen einfach wieder melden.

Nur dass ich es erwähne: Icha habe im Moment keinerlei Idee, wozu die Sache dienen könnte, aber machbar ist es mit MemBrain wie man sieht ;-)

Viele Grüße und viel Erfolg!

PS: Ich habe die Sache nicht sehr intensiv getestet, gut möglich also, dass noch ein paar Bugs drin sind...

Edit 14.02.2011: Erste Bug fixes am Script: Erstes Netz wurde nicht zur Berechnung verwendet.

Edit 15.02.2011: Weiterer kleiner Bug fix. Funktionalität grob getestet
Attachments
CombinedNetsExample.zip
Skript mit Beispieldateien (letzte Aktualisierung: 15.02.2011)
(4.32 KiB) Downloaded 692 times
Thomas Jetter
Michal
Posts: 10
Joined: Fri 21. Jan 2011, 19:23

Re: Übungsscript

Post by Michal »

Hallo Thomas,

vielen Dank für die viele Arbeit.
Ich werde daraus viel lernen. Der Hintergrund ist ein folgender:
Ich modelliere einen Rollenrost, das ist ein Sieb, wobei das zu siebende Gut durch die Spalten zwischen rotierende Rohre zu fallen hat (wenn es kleiner als der Rollenabstand ist).
Ich habe mit DEM (discrete element method) rel. gute Erfolge erzielen können (Anlage).
Nur dauern diese Methoden sehr lange.
Da hatte ich folgende Idee: Aus der Simulation (DEM) ermittle ich die Abhängigkeit zwischen der Belegung des Rostes über einen Spalt. Hier untersuche ich den Einfluss des Massestromes (und andere Parameter) auf den Sieberfolg, der Massestrom nimmt von Rohr zum nächsten immer mehr ab, da Gut abgesiebt worden ist. Also könnte ich bei Kenntnis des Verhaltens über einem Spalt den gesamten Rollenrost auslegen (vielleicht). Das NN sagt mir dann was bei einem Spalt durchfällt und der Massestrom mit dem der nächste Spalt beladen wird ist die Differenz zum vorhergehenden Spalt. Daher die Verschaltung (Substraktion) mit der ich nicht klar kam.
Das script ist für einen Anfänger nicht gerade einfach, aber es wird schon,...
Kann man auch die Inhalte der Input und Output Neurone anders auslesen? Oder geht es nur mit der Lessonauswahl, dann pattern einlesen und über column indizieren? Ich denke an die Namen der Neuronen und ein direktes ansprechen, oder geht es gar nicht?
Auf alle Fälle vielen Dank, jetzt mache ich mich an die Arbeit!
Gruss
Michal
Attachments
Roro.png
(227.11 KiB) Not downloaded yet
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Übungsscript

Post by Admin »

Vielen Dank für die Informationen, das erklärt natürlich die Idee. Interessante Sache, bin neugierig, ob der Ansatz in der Praxis funktionieren wird!
Michal wrote:Das script ist für einen Anfänger nicht gerade einfach, aber es wird schon,...

Ja, wenn man noch nie C, C++, Java oder C# programmiert hat, ist es wahrscheinlich eine ziemliche Herausforderung. Das unterschätzt man wohl leicht, wenn man selbst viel programmiert. Einfach dran bleiben und ein wenig über die Grundlagen einer dieser Sprachen lesen (würde C# oder Java empfehlen, hier ist die Ähnlichkeit zu AngelScript wohl am größten). In den Scripten kommt man meist mit den grundlegensten Sprachkonstrukten aus, so dass eine Einführung in die wesentlichsten syntaktischen Elemente bestimmt schon sehr viel helfen wird.

Ansonsten gilt immer: 'Teile und herrsche!'
Das ist aus meiner Sicht das wichtigste Paradigma beim Programmieren überhaupt: Zerlege die Aufgabe in ihre grundsätzlichen Bestandteile und schreibe dann übersichtliche, kleine Funktionen, die genau begrenzte Teilaufgaben erledigen. Wenn man das nicht befolgt, entsteht rasch eine Komplexität, die nicht mehr beherrschbar und wartbar wird.
Wenn die Skripte noch größer werden, dann macht es auch Sinn, größere Teilfunktionalitäten in getrennte Skriptdateien auszulagern.
Diese kann man dann mit

Code: Select all

#include "ScriptPart.as"
einbinden (wobei das eingebundene Teilscript hier in der Datei 'ScriptPart.as' enthalten ist). Das ist dann funktional wie wenn alles in einer Datei steht, lässt sich aber definitiv besser beherrschen.
Michal wrote:Kann man auch die Inhalte der Input und Output Neurone anders auslesen?
Aber sicher. Der Zugriff auf die Neuronen des Netzes ist grundsätzlich getrennt vom Zugriff auf eine Lesson. Zum Beispiel gibt es die Funktionen:

Code: Select all

// Get the current activation of an input neuron
bool GetInputAct(uint inNeuronNum, double &out activation)

// Get the value of an input column in the currently active pattern of the currently active lesson in the Lesson Editor.
bool GetPatternInput(uint inColumnNum, double &out value)


Wie man sieht bezieht sich die erste Funktion auf ein Input-Neuron des geladenen Netzes, während die zweite Funktion (die im geposteten Script verwendet wird), auf einen Wert der aktiven Lesson zugreift.
Man kann sogar auf Hidden-Neuronen zugreifen, das ist allerdings aufwendig und in der Regel nicht zu empfehlen.
Michal wrote:Ich denke an die Namen der Neuronen und ein direktes ansprechen,
Auf die Namen der Neuronen kann man ebenfalls zugreifen, z.B. über:

Code: Select all

//  Get the name of an input neuron
bool GetInputName(uint inNeuronNum, string &out name)

// Get the name of an input column in the currently active lesson in the Lesson Editor.
bool GetLessonInputName(uint inColumnNum, string &out name)
Viele Grüße
Thomas Jetter
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Übungsscript

Post by Admin »

Noch ein Nachtrag:

Wenn man sich mit dem Schreiben von Scripts beschäftigt, dann ist es fast unerlässlich, sich einen entsprechenden Editor mit Syntax-Highlighting einzurichten.
Der ScriptExamples Download von der MemBrain Homepage enthält eine Anleitung, wie man das z.B. mit dem Freeware Editor PSPad macht. Es ist einfach und eine einmalig durchzuführende Sache und erleichtert die Arbeit mit MemBrain Scripts erheblich!

Viele Grüße
Thomas Jetter
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Übungsscript

Post by Admin »

Anmerkung:

Erste Bug fixes am Script oben durchgeführt.
Thomas Jetter
Michal
Posts: 10
Joined: Fri 21. Jan 2011, 19:23

Re: Übungsscript

Post by Michal »

Hallo Thomas,
irgendwo ist die Anlage verschwunden.

Gruss

Michal
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Übungsscript

Post by Admin »

Michal wrote:irgendwo ist die Anlage verschwunden.
Nein, nein, ich habe das zip-File weiter oben im Beitrag korrigiert, einfach nocheinmal herunterladen und entpacken.

Viele Grüße
Thomas Jetter
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Übungsscript

Post by Admin »

Gerade habe ich noch einen kleinen Bug-Fix durchgeführt und das Script grob getestet, es erzeugt jetzt schon einmal plausible Werte.

Im Anhang sind drei ganz einfache Testnetze und ein vereinfachtes CSV zum Test zu finden.
Attachments
TestNets.zip
Testdateien
(989 Bytes) Downloaded 721 times
Thomas Jetter
Post Reply