Vorschläge für die nächste Version

Haben Sie Verbesserungsvorschläge oder Wünsche für eine neue MemBrain-Version? Haben Sie einen Bug entdeckt, der behoben werden sollte? Möchten Sie einfach nur eine positive oder negative Bewertung hinterlassen?

Dann ist dieses Forum der richtige Platz, um Ihren Beitrag einzubringen.
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Vorschläge für die nächste Version

Post by Admin »

Hallo Seppy,

so etwas habe ich auch schon angedacht, also die Möglichkeit, beliebig viele Timer starten/überwachen zu können.
Alternativ oder zusätzlich hatte ich mir überlegt, eine Funktion bereitzustellen, über die man die aktuelle Systemzeit als 32 Bit-Wert (z.B. in Sekundenauflösung) erhalten kann.
So könnte man sich beliebige Startzeitpunkte merken und dann einfach über Zeitdifferenz Intervalle überprüfen. Die hohe Auflösung (ms) des bisherigen Timers wird man ohnehin selten benötigen, eine Auflösung von Sekunden reicht i.d.R. völlig, denke ich.
Wenn man dann noch eine Funktion hat, die Systemzeit in eine absolute Zeitangabe zu konvertieren, dann kann man die Skriptläufe auch mit Datum/Uhrzeit dokumentieren, z.B. in Ergebnisdateien oder ähnliches.

Was meinst Du dazu?

Viele Grüße und nochmal vielen Dank für Deine intensiven Tests, die schon so manchen Bug-Fix ermöglicht haben ;)
Thomas Jetter
User avatar
Seppy
Posts: 47
Joined: Fri 5. Dec 2008, 04:48
Location: 90537 Feucht

Re: Vorschläge für die nächste Version

Post by Seppy »

Hallo Thomas,

beliebig viele Timer starten/überwachen zu können
(GENAU das wollte ich damit sagen).

Alternativ oder zusätzlich hatte ich mir überlegt, eine Funktion bereitzustellen, über die man die aktuelle Systemzeit als 32 Bit-Wert (z.B. in Sekundenauflösung) erhalten kann.
(Wäre auf jeden Fall SINNVOLL).

Die hohe Auflösung (ms) des bisherigen Timers wird man ohnehin selten benötigen, eine Auflösung von Sekunden reicht i.d.R. völlig, denke ich.
(Bin ich ganz Deiner Meinung, Sek. reichen vollkommen)

Wenn man dann noch eine Funktion hat, die Systemzeit in eine absolute Zeitangabe zu konvertieren, dann kann man die Skriptläufe auch mit Datum/Uhrzeit dokumentieren, z.B. in Ergebnisdateien oder ähnliches.
(Jjjjaiiiin, ich verstehe nicht ganz, was Du mit "absolute Zeitangabe" meinst, aber ich vermute es ?????
(Die Systemzeit in einen Zahlenwert für MemBrain-Script zu konvertieren, mit dem man dann weiterrechnen kann).

Aber Du hast auf jeden Fall verstanden, WAS MIR/UNS FEHLT, beliebig viele Timer starten/überwachen zu können.

Gruß Seppy
Wer arbeitet macht Fehler, wer wenig arbeitet macht wenig Fehler, wer nicht arbeitet macht keine Fehler, wer keine Fehler macht wird befördert.
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Vorschläge für die nächste Version

Post by Admin »

Hallo Seppy,

die Implementierung macht gute Fortschritte. Mit der Funktion, die Systemzeit im Skript abrufen zu können erhält man in Verbindung mit ein bisschen Skript-Code beliebig viele Timer mit Sekundenauflösung. Den Skript-Code dazu werde ich auch auf die Homepage legen, so dass jeder die Timer in den Skripts verwenden kann.

Das Release wird allerdings noch ein bisschen auf sich warten lassen, denn ich bin dabei, weitere, umfangreichere Skripterweiterungen zu implementieren:
In der nächsten Version wird man über das Skript neuronale Netze komplett erstellen und auch modifizieren können. So kann man beliebige evolutionäre Algorithmen in eigenen Skripten programmieren.

Was hältst Du davon, kommt das Deinem Spieltrieb nicht optimal entgegen ;) ?

Viele Grüße
Thomas Jetter
User avatar
Seppy
Posts: 47
Joined: Fri 5. Dec 2008, 04:48
Location: 90537 Feucht

Re: Vorschläge für die nächste Version

Post by Seppy »

Hallo Thomas,

Das mit dem Timer finde ich so O.K.
Aber wenn Du diesen Code auf die Homepage stellst, warum nicht mehr ?
Ich denke da an eine Art Toolbox (LERN-Baukasten Prinzip).
Damit meine ich KLEINE Codesnipsel, Routinen die immer wieder gebraucht werden (Evtl. NICHT LAUFFÄHIG, nur als Ergänzung zur Online-Hilfe, um daraus zu lernen).
An dieser Toolbox sollten sich natürlich auch die User beteiligen können.
z.B. weis ich im Moment leider auch nicht so genau, naja sowas wie der Timer, das lader der Lessons, das normalisieren des Netzes, das vorverarbeiten der Rohdaten etc. etc....
Als Neuling steht man da oft wie der Ochse vor'm Scheunentor, und gerade solche infos bringen einen dann weiter.

Nach den evolutionären Algorithmen wollte ich auch mal fragen, HAB MICH ABER NICHT GETRAUT :oops:
Ausserdem werden dazu meine programmier Kenntnisse nicht ganz ausreichen, aber spielen würde ich damit sehr gerne mal.
(Mir schwirrt da SEHR VIEL im Kopf herum)

Wie wäre es, wenn man einem Netz Regeln und Funktionen (Einen Bauplan) giebt, wie es ein zweites Netz BAUEN kann ???
(Das wird vermutlich eine LEBENSAUFGABE)

Ich finde aber, das ist ein HÖCHST interresantes Thema.
Hab erst vor kurzem einen Bericht gelesen: Die haben im Computer künstliche Lebewesen erzeugt, diese sollten ihre Gliedmasen (also die Art der Fortbewegun) dann durch Evolution mit einem "sich selbst modifizierendem" Netz entwickeln.
War aber ein genetischer Fehlschlag, kam nichts weltbewegendes dabei raus, ABER SEHR LEHRREICH.

Hast Du Dir den SVM-Teatcher mittlerweile angesehen ?
http://de.wikipedia.org/wiki/Support_Vector_Machine
Bringt der was gegenüber RPROP ???

Und noch eine Frage:
Kann man mit dem aktuellen Scripting das Netz schon NORMALISIEREN, oder kommt das erst noch ???
Wenn Ja, mit welchem Befehl schreibt man die Normwerte in das Neuron ?

Das mit "Lesson Exercises" hat sich erledigt.

Und lass Dir Zeit, die aktuelle Version ist ja voll O.K.

Gruß Seppy
Wer arbeitet macht Fehler, wer wenig arbeitet macht wenig Fehler, wer nicht arbeitet macht keine Fehler, wer keine Fehler macht wird befördert.
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Vorschläge für die nächste Version

Post by Admin »

Hallo Seppy,

gerade fällt mir auf, dass ich auf zwei Fragen in Deinem Posting noch gar nicht geantwortet habe:
Seppy wrote:Kann man mit dem aktuellen Scripting das Netz schon NORMALISIEREN, oder kommt das erst noch ???
Nein, kommt aber in der nächsten Version, zusammen mit allen anderen Neuron-Parametern.
Seppy wrote:Hast Du Dir den SVM-Teatcher mittlerweile angesehen ?
Hatte ich, ja. Konnte aber auf die Schnelle damals keinen Zugang finden. Ich muss mir das aber nochmal irgendwann in Ruhe anschauen. Am schwierigsten wird wohl dann die Überlegung, ob und wie dieser Algorithmus mit dem Netzmodell von MemBrain integriert werden kann.

Die neue Version macht sehr gute Fortschritte, die meisten Befehle sind implementiert. Neben jeder Menge neuer Operationen zum Erzeugen/Löschen/Modifizieren von Links und Neuronen gibt es mit der nächsten Version auch die #include-Direktive in Skripts. Damit muss ein Skript nicht mehr aus nur einer Datei bestehen, sondern kann ich mehrere Module aufgeteilt werden. Ich werde dazu ein Beispiel eines universellen Timer-Moduls ins Netz stellen, das dann jeder einfach mit #include in eigene Skripte einbinden und nutzen kann. Genauso wäre ein Netz-Erzeugungsmodul auf Basis eines eingelesenen Datensatzes denkbar, oder Netz-Modifikationsmodule, die man als Grundlage evolutionärer Algorithmen benutzen könnte.

Damit würde also auch Deine Idee unterstützt, dass Benutzer Skriptmodule für andere zur Verfügung stellen könnten. Vielleicht sollte ich einfach eine neue Forum-Kategorie dazu eröffnen.

Zudem werde ich demnächst auf der Homepage ein kleines Dokument veröffentlichen, in dem beschrieben ist, wie man einen (freien, leistungsfähigen) Editor so konfiguriert, dass man darin komfortabel MemBrain Sktipte editieren und testen kann und bei Fehlern gleich die entsprechenden Zeilen im Skript angesprungen werden. Wenn möglich möchte ich in MemBrain auch die Option einbauen, dass bei einem Skriptfehler die entsprechende Skript-Datei gleich an der richtigen Stelle (Zeile) im Editor geöffnet wird, das dürfte das Debuggen deutlich erleichtern. Hier muss ich aber erst noch die Machbarkeit prüfen.
Seppy wrote:Das mit "Lesson Exercises" hat sich erledigt.

Wie das? Ich habe für die neue Versioln jedenfalls mal Skriptkommandos vorgesehen, um die Lesson-Wiederholungen zählen zu können.

Die neue Version wird allerdings noch ein Weilchen auf sich warten lassen, wie immer verzögert die notwendige Dokumentation die ganze Sache deutlich ;-)

Viele Grüße
Thomas Jetter
User avatar
NNTUM
Posts: 10
Joined: Wed 22. Jul 2009, 23:24

Re: Vorschläge für die nächste Version

Post by NNTUM »

Hallo,
ich arbeite gerade viel mit Skripten und MemBrain. Leider enttäuscht aber AngelScript langsam etwas, war bisher zwar sehr mächtig aber is stellenweise doch stark kastriert worden (im Vergleich zu C++).

Mein Problem:

Ich MUSS (Vorgabe von meinem Betreuer) nun auch mit Zeitvarianten Netzen arbeiten und gebe dabei viele verschiedene Zeitverläufe eines Signals vor. Sagen wir meine Zeitverläufe bestehen aus 50 äquidistanten Punkten, dann macht das für einen Zeitverlauf in einer Lerndaten-Datei 50-Zeilen für einen Verlauf. Will ich jetzt 10 Zeitverläufe lernen lassen, sind das schon 500 Zeilen. Jedoch würde ich gerne das Netz bei jedem Trainingsschritt die Reihenfolge in der die Zeitverläufe gelernt werden neu zufällig sortieren lassen. Die Funktion RANDOM_ORDERED mischt aber einfach die 500 Zeilen wild durcheinander. Jedoch soll ja innerhalb EINES Zeitverlaufes (=Paket von 50 Zeilen) die Reihenfolge gleich bleiben. Ist ja einleuchtend.

Das ganze wollte ich nun in Angelscript umsetzen indem ich jeden Zeitverlauf in eine eigene Datei packe, diese in einen Subordner, den Ordner auslese und alle Dateinamen der Lerndateien (bei mir RAW CSV) in eine verkettete Liste einlese. Diese dann durchmischen vor jedem Lerndurchgang und dann für jede einzelne Datei dann in einer Schleife sowas wie: ResetNet(),Lade(NaechsteLerndatei),Training().

Da leider Pointer nicht unterstützt werden in AngelScript (laut http://kharchi.eu/wiki/doku.php?id=cpp:scripting) war mein nächster Versuch das ganze mit einem String-Array zu machen in dem die Dateinamen der Lerndaten stehen. Leiter scheiterts hier momentan dran, dass es anscheinend keine random-Funktion in AngelScript gibt :(

Also, mein Vorschlag für kommende Updates:

- Entweder einfach einen Zufallszahlengenerator bei Angelscript dazupacken
- ODER: Pointer zulassen (wohl etwas schwerer zu implementieren ;) )
- ODER: Eine entsprechende Funktion direkt gleich in MemBrain implementieren die irgendwie Zeitverläufe in sich in der richtigen Reihenfolge belässt aber die Summe aller Verläufe untereinander durchmischen kann (so wie es bisher ja mit "normalen" Lerndaten bereits prima funktioniert!)

SOLLTE es eine dieser Funktionen schon geben sorry, aber hab sie nach 2 Tagen immer noch nicht gefunden :)
________________________________________________
"Sooooo, this is engineering, huh? [...] Engineering - where the noble semi-skilled laborers execute the vision of those who think and dream... Hello Oompa Loompas of science!" :D
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Vorschläge für die nächste Version

Post by Admin »

Hallo,

MemBrain-Hilfe (über F1 erreichbar) --> Scripting --> Command Reference --> Maths:
Dort gibt es die Funktion

Code: Select all

float Random()
welche einen Zufallswert zwischen 0 und 1 generiert.

Hilft das?

Zugegebenermaßen fördert die Suche-Funktion der Hilfe das nicht zu Tage, das ist verbesserungswürdig...

Viele Grüße
Thomas Jetter
User avatar
NNTUM
Posts: 10
Joined: Wed 22. Jul 2009, 23:24

Re: Vorschläge für die nächste Version

Post by NNTUM »

ok, Zeit sich in Grund und Boden zu schämen oder?! :D
hm, is der befehl Case-Sensitiv? Wenn ja doppeltärgerlich, denn "random()" wurde bei mir nicht gefunden.

Edit:

grad getestet, es is Case-sensitive... naja dann war ich ja gar nicht mal so weit weg ;)
Vielen Dank für die Hilfe!!!!

Nochmal Edit:

Leider etwas ungenau in der Hilfe beschrieben, vielleicht kannst du mir weiterhelfen? Bekomm ich eine Zufallszahl aus dem Intervall [0;1) oder [0;1]?
________________________________________________
"Sooooo, this is engineering, huh? [...] Engineering - where the noble semi-skilled laborers execute the vision of those who think and dream... Hello Oompa Loompas of science!" :D
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Vorschläge für die nächste Version

Post by Admin »

Ich muss gestehen, dass ich das momentan nicht sicher sagen kann.

Da es aber ein floating point Wert ist, muss man ohnehin von [0 .. 1] ausgehen, da die Grenzen evtl. nicht genau in float abbildbar sind (das ist eine generelle Krux mit floating point Werten).

Bzgl. Groß-/Kleinschreibung ist AngelScript wie C, d.h., alles ist case sensitive...

Viele Grüße,
Thomas
Thomas Jetter
User avatar
NNTUM
Posts: 10
Joined: Wed 22. Jul 2009, 23:24

Re: Vorschläge für die nächste Version

Post by NNTUM »

soooo, nach langer Arbeit an meinen Lerndaten konnte ich eben gerade mal wieder mein erstes NN seit langem zum Lernen anfangen lassen :)

Und dabei ist mir gleich eine Idee gekommen, was man als kleine Zusatzfunktion in Membrain konvertieren könnte:

Man kann als Datensatz für die NetError-Berechnung ja einen eigenen Datensatz auswählen (also einen anderen als mit dem gelernt wird!). Es wäre sicher leicht zu implementieren, wenn der aktuelle Netzfehler auch für den Lerndatensatz (und nicht nur den NetError-Datensatz) zusätzlich angezeigt werden könnte und für einige Fälle auf jedenfall hilfreich. (Meinen z.B. :D )
________________________________________________
"Sooooo, this is engineering, huh? [...] Engineering - where the noble semi-skilled laborers execute the vision of those who think and dream... Hello Oompa Loompas of science!" :D
Post Reply