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
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,
da ich die Funktionen "Reset Net" und "Randomize Net" selbst schon einige hundert mal anklicken durfte, hab ich doch noch eine Idee.

Den Menüpunkt "Randomize Net" aus dem Menü löschen.
Klickt der User "Reset Net" an, sollte das Einstellungsfenster des aktiven Teachers aufgehen.
In diesem Fenster könnte man dann folgende Funktionen unterbringen:
------------------------------------------------------------------
Wie reseten ?
Set Links to Null
Set Links to Random
Set Neurons to Null
Set Neurons to Random

Wann reseten ?
Niemals
Jedes mal den User fragen
Vor jedem Start des Teachers
Bei einer neuen Lesson
------------------------------------------------------------------

Die Funktionen dann mit Checkboxen zum anklicken.
Spricht irgendetwas dagegen, die Links auf 0 oder die Neuronen mit Zufallswerten zu initialisieren ?
Dann könnte man nämlich beides auf 0 setzen und hätte dann immer den gleichen Anfangszustand.
(Villeicht sinnvoll zum vergleichen von mehreren Netzen oder der Größe der Hiddenschicht).

Gruss 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,

weshalb musst Du denn 'Reset Net' so oft anklicken? Den aktuellen Teacher kann man bereits auf 'Reset Net before every Lesson Run' setzen. Randomize wird nach dem Verändern des Netzes und/oder Teachers ja auch automatisch abgefragt. Brauchst Du es so oft?

Das Sripting ist übrigens fertig implementiert, die Doku dazu wächst kräftig... ich hoffe, noch im Februar ein Release hinzubekommen, ganz sicher ist das aber nicht.
Es ist auch ein 'Play - Pause - Stop' Tastenfeld für das Scripting in der Toolbar hinzugekommen. Damit kann man eine beliebige Abfolge von 'Randomize', 'Reset', Training, Validierung usw. dann ja auch in einem kleinen Skript ablegen, vielleicht zusammen mit einem benutzerdefinierten Trainingsabbruch-Algorithmus o.ä. Das Script kann man dann immer mit einem Klick aus der Toolbar ausführen. Das sollte das Problem auch lösen und ist wesentlich flexibler, oder?
Die Skripting-Engine unterstützt übrigens auch entsprechende Mathematik-Operationen (Trigonometrische Funktionen, Logarithmen etc.), beliebige Datei-Zugriffe, sowie das Starten, Überwachen und Beenden externer Applikationen. Ein leistungsfähiger String-Datentyp ist vorhanden und die Skripte können mit dem Benutzer über Message-Boxen, Werteeingabefelder, Dateiauswahldialoge etc. interagieren. So könnte man z.B. nach einer Validierung ein exportiertes csv-File gleich mit Excel öffnen lassen o.ä. Die Skripte können außerdem nun auch direkt auf die Ein- und Ausgabeneuronen des Netzes zugreifen, ebenso direkt auf die Werte der Pattern von Lessons. So könnte man mittels eines Skripts auch automatisiert eine Lesson erstellen, oder aus externen Dateien aufbereiten o.ä. Ein Skript könnte auch irgendwelche Ergebnisse in eine Datei schreiben, diese Datei an eine externe Applikation übergeben, die die darin enthaltenen Daten verarbeitet und evtl. an das Skript über eine andere Datei Informationen zurückliefert... Eine Fülle von Möglichkeiten, denke ich.

Viele Grüße, ich hoffe, Du erzielst gute MemBrain-Fortschritte?
Thomas Jetter
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,

ich habe vor lauter Skript-Schwärmerei noch nicht auf Deine Fragen geantwortet, sorry...
Spricht irgendetwas dagegen, die Links auf 0 oder die Neuronen mit Zufallswerten zu initialisieren ?
Dann könnte man nämlich beides auf 0 setzen und hätte dann immer den gleichen Anfangszustand.
(Villeicht sinnvoll zum vergleichen von mehreren Netzen oder der Größe der Hiddenschicht).
Die gesamten überwachten Lernalgorithmen basieren eigentlich immer auf der Voraussetzung, dass die Gewichte mit kleinen Zufallswerten initialisiert sind. Hast Du mit Gewichten = 0 bisher gute Ergebnisse erzielt? Das ist ja schnell ausprobiert, alles markieren, ENTER drücken und alle Gewichte auf 0 setzen...

Was Du mit 'Neuronen auf Zufallswerte setzen' meinst, ist noch nicht ganz klar. Wenn Du die Schwellen ('Activation Thresholds') der Neuronen meinst, diese werden beim 'Randomize' ebenfalls mit Zufallswerten belegt, sie wirken mathematisch ja wie Links zu einem sogenannten 'On-Neuron'. Wenn Du die Aktivierungen der Neuronen auf Zufallswerte setzen willst: Das geht im Moment nicht. Wäre aber auch höchstens bei einem zeitvarianten Netz interessant, um zu sehen, wie es aus einem zufälligen Anfangszustand heraus agiert...

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,

Die Funktion "Reset Net before every Lesson Run" hatte ich leider (In der Hitze des Gefechts) TOTAL übersehen.
Das mit Reset NULL vergiss auch wieder, (War ne blöde Idee von mir) auch damit könnte man Netze vermutlich nicht vergleichen...

Hab jetzt auch ein Netz (für mein DAX-Problem) gefunden.

Input : 33,Ident 0 to 1
Contex: 11,Identical
Hidden: 11,Logistic
Output: 1, Logistic

Von Hidden ist jede Neuron zu jeder Neuron der Contextschicht rückgekoppelt.
Alle rückwärtigen Links haben das Gewicht 1 und (Lock Weight for Teacher).
Von Input zu Output besteht KEINE Verbindung.
Dieses Netz bringt z.Z. die besten Ergebnisse, mit (Delay, Decay) wird das Netz einfach zu groß, hab auch alles mögliche probiert, aber das Time Delay braucht WESENTLICH länger zum lernen als das oben beschriebene Netz und bringt KEINE bessere Ergebnisse.
Und mit festgepinnter Rückkoplung verhalten sich rückgekoppelte Netze "RELATIV" stabil.

Und da sind wir schon bei der nächsten fehlenden Funktion:
Wie wärs wenn man z.B. mit <Shift> + linke Maustaste einen Bereich von "Links" (NUR LINKS) markieren könnte.
Und jetzt mit der rechten Maustaste die EIGENSCHAFTEN aller markierten Links verändern könnte ???
Ooooder giebts die schon, und ich habs WIEDERMAL übersehen ???

Da wir ja mal Sammler und Jäger waren,
Werde ich bis zur ersten Scripting Version noch INPUTS sammeln, und dann auf die Jagt nach dem Dax(chs) gehen.

Das geht ja sehr flott bei Dir wenn Scripting schon in 02/03 kommt, wieviel Stunden hat dein Tag ?????
Meiner hat NUR 24h, und die sind ruckzuck vorbein.

Auf das Scripting freu ich mich natürlich wie ein kleines Kind(An Ostern und Weihnachten).....

Helau...

Gruss 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 »

Und da sind wir schon bei der nächsten fehlenden Funktion:
Wie wärs wenn man z.B. mit <Shift> + linke Maustaste einen Bereich von "Links" (NUR LINKS) markieren könnte.
Und jetzt mit der rechten Maustaste die EIGENSCHAFTEN aller markierten Links verändern könnte ???
Ooooder giebts die schon, und ich habs WIEDERMAL übersehen ???
<Shift> + linke Maustaste, dann Maus bewegen ist schon belegt, übrigens mit einer sehr sinnvollen Funktion, solltest Du unbedingt mal austesten ;) Die Funktion kann man übrigens zu jeder Zeit nutzen, also auch mitten in einer anderen Aktion, z.B. Neuronen verschieben, verlinken usw...

Aber um auf Deine Frage zurückzukommen: Deine Funktion gibt es quasi auch schon, ja: Es gibt Funktionen, die alle Input- bzw. Output-Links der markierten Neuronen markieren und die Markierung der Neuronen dabei zurücksetzen. Geht so: Den ganzen Bereich markieren, dessen Links Du markieren willst, also sowohl die Neuronen als auch die Links (im Prinzip reicht es , alle Neuronen zu markieren, zwischen denen Deine Links verlaufen, aber alles mit einem Rechteck zu markieren ist einfacher). Dann <Strg> + <Alt> + <o> oder <Strg> + <Alt> + <i> drücken (entspricht den Menüs <Extras><Select Output Links> bzw. <Extras><Select Input Links>). Jetzt sind alle Links markiert, die Neuronen nicht mehr. Ein Druck auf die <ENTER>-Taste lässt Dich die Eigenschaften der Links einstellen.

Das führt nicht nicht immer genau zu dem, was Du erwähnt hast: Wenn es noch Output-Links gibt, die Deine markierten Neuronen verlassen, hin zu nicht markierten, dann werden diese mit markiert wenn Du <Strg> + <Alt> + <o> verwendest. Entsprechendes gilt natürlich für Input-Links bei Verwendung von <Strg> + <Alt> + <i>.
Eine bessere Methode besteht deshalb darin, die Neuronen, zwischen denen die Links laufen, sowohl zu 'Extra-selektieren', ALS AUCH 'normal' zu selektieren. Dann <Extras><Select Links FROM Extra Selection> oder <Extras><Select Links TO Extra Selection> wählen. Dann werden alle Links, die irgendwie zwischen den Neuronen verlaufen selektiert, alle Neuronen werden automatisch deselektiert. Die Funktion markiert alle Links die zwischen der Gruppe der 'Extra-Selection' und der Gruppe der 'normalen Selection' verlaufen. Wenn die Gruppen identisch sind, dann werden immer alle Links selektiert, die von irgend einem der markierten Neuronen zu einem anderen markierten Neuron verlaufen. Ich denke, das ist genau was Du brauchst, oder?
Das geht ja sehr flott bei Dir wenn Scripting schon in 02/03 kommt, wieviel Stunden hat dein Tag ?????
Meiner hat NUR 24h, und die sind ruckzuck vorbein.
So geht's mir leider auch immer, seufz... ;) Allerdings kommt mir hier natürlich ungeheuer zu Gute, dass ich eine fertige Scripting-Engine einbinde. Ich muss also 'nur' alles MemBrain-spezifische implementieren und dokumentieren.
Hab jetzt auch ein Netz (für mein DAX-Problem) gefunden.
Wow, Du meinst Du bekommst es wirklich hin, mit NN Börsenkurse brauchbar zu erraten? Das ist für Börsianer so was wie der heilige Gral, scheint mir... Sie werden Dir zu Füßen fallen, wenn das wirklich mal funktionieren sollte ;)

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,

mit "Börsenkurse erraten" hast Du es voll getroffen.
Es ist noch nicht genau genug, aber mit 24 Input Datensätze kann man noch nicht mehr verlangen.
z.Z. kommt sowas heraus:

Dax t = 4644,63
Dax t+1 = 4413,39 -4,98%
Prognose für t+1 = 4331,75 -6,74%
Fehler = -1,76%

Naja zumindest stimmt die Richtung schonmal.
Ich hack jetzt mal die aktuellen Kurse rein und berechne dann die nächste Woche, mal sehen was rauskommt.

Das mit den Links markieren ist genau das was ich gesucht habe vielen Dank, die Links einzeln zu ändern war echt eine Zumutung.

Gruss 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,

MemBrain mit intergriertem AngelScript ist nun endlich online gegangen ;-)

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,
welch schöne Nachricht (Was heist hier "endlich online gegangen")
Ich meine das war jede Menge harte Arbeit, und dafür ist es ja ziemlich schnell gegangen.
Ich werd's gleich runtersaugen und mal schauen welche Überaschungen Du eingebaut hast....
(Sind auch Ostereier drin ??? Es ist ja bald soweit :lol: )

Danke schon mal für Deine Arbeit, 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 »

Nein, mit Ostereiern kann ich nicht dienen, die Gelegenheit hab' ich glatt versäumt...

Vielleicht (hoffentlich nicht!) findest Du ja aber den einen oder anderen Käfer ;-)

Viele Grüße und viel Spaß mit dem neuen Scripting!
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,
folgenden Vorschlag für den Timer in der Scriptsprache:

Könnte man nicht jedem Timer eine Nummer, oder noch besser einen Namen geben, damit folgendes möglich wird ?

StartTimer(TIMER_1, 240 * 1000);

while (!IsTimerExpired(TIMER_1))
{
StartTimer(TIMER_2, 60 * 1000);

while (!IsTimerExpired(TIMER_2))
{
bla, bla, bla...
}
}

Das wollte ich auch in meinem Script einsetzen, wird aber vermutlich z.Z. nicht funktionieren (Hab's auch nicht ausprobiert).
Oder geht es doch ???

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.
Post Reply