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 »

Gleichzeitig geht es momentan nicht, das stimmt, habe ich als Wunsch aufgenommen.
Das würde aber auch zusätzlichen Rechenaufwand und damit ein Verlangsamen des Trainings bedeuten. Schließlich muss der Net Error ja nicht nur angezeigt, sondern auch berechnet werden. Dazu muss eigentlich die komplette Lesson nach dem Trainingsdurchlauf noch einmal an das Netz gelegt, die Outputs berechnet und die Deltas zu den Trainingsvorgaben berechnet werden.
Eine Alternative ist das 'On-The-Fly' berechnen während des Trainings, das bringt aber auch eine kleine Verfälschung mit sich, die je nach Anwendung unbekenklich oder eben wichtig sein kann.

Was im Moment allerdings schon geht: Man kann im Lesson-Editor (oder auch über Skript) während des Trainings die 'Net Error Lesson' umschalten, so dass der Error-Graph beim Umschalten auf die jeweils andere Lesson springt.

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

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

Post by schnurpel »

ich hätt auch einen vorschlag, weil mir das dauernd passiert:

im lesson-editor überschreibt man mit dem menüpunkt save current lesson sehr oft und bei schnellen klickfolgen versehentlich eine andere lesson, wenn man "save lesson as" anklicken will. hier wäre eine sicherheitsabfrage sehr gut.

vg
Bauchhirn
Posts: 2
Joined: Thu 7. Jan 2010, 15:36

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

Post by Bauchhirn »

Hallo ich bin der Neue - ich komm jetzt öfters.

Ergänzung zu schnurpels Vorschlag ->Autosave nach jeder Lesson mit angehängter Durchgangsnummer. und der Option die Autosave-Funktion im Trainer zu nutzen.

Ich persönlich habe mich bis jetzt noch nicht so intensiv mit MemBrain und dessen Nutzung auseinandergesetz.

Vor einiger Zeit hatte ich einmal paar Logik-Funktionen gebaut und trainiert das war es soweit auch. Aber aufgefallen ist mir die Mächtigkeit von Membrain. Super-Teil. Und einige Anwendungen schweben mir auch schon vor.

Dazu ist es bestimmt nötig kleinere Netze zu entwickeln und zu trainieren. Diese Netze sollten dann miteinander kombinierbar sein, so das komplexere Verarbeitungen möglich sind.
Beispiel:

Netz 1 Erkennen von Farben und Farbnuancen aus verschiedenen Eingangsmöglichkeiten spezialisiert.

Netz 2 Erkennen von Formen und Kombinationen derer spezialisiert.

Netz 3 Erkennen von Stillstand - Bewegung

in einem größeren Netz
Rechtsaugenetz Erkennen von Farben, Formen und Bewegung und das parallel mit Hilfe der Netze 1,2 und 3
Linksaugennetz Erkennen von Farben, Formen und Bewegung und das parallel mit Hilfe der Netze 1,2 und 3
Paaraugennetz - ...

Die Fähigkeit in einem neueren Netz mehrere vorhandene Netze zu vernetzen, dürfte viel Training ersparen und schon vorhandenes "Wissen" wieder nutzen

Als größeres Beispiel sehe ich OCR, dessen Fehler mit Spracherkennung korrigiert wird oder andersrum.

Die Superfunktion die mir noch vorschwebt, wär ein intelligenter Netzmanager. Die Erklärung erfolgt an einem Beispiel.
Herr X bastelt aus Neugier eine Logikschaltung vom Typ UND-Verknüpfung und stellt sie im Netz zur Nutzung zur Verfügung.
Frau S bastelt aus Neugier ein Netz zur Erkennung von natürlichen Farben (Hauttyp ermitteln) auch sie stellt es zur Nutzung im Netz zur Verfügung
Frau A hat den Auftrag ein Netz zum Erkennen/Voraussagen von Wachstumsphasen von unterschiedlichen Pflanzen unter Laborbedingungen. auch sie stellt das Ergebnis der Arbeit in's Netz

Herr E downloaded die Netze und bindet sie im Netzmanager ein. Beim Entwickeln eines neuen Netzes "Bodenbewegung beim Bau eines Gebäudes" fällt dem Trainer/MemBrain auf, das das Netz von Frau S und von Herr X prima in das zu trainierende paßt und bindet es nach einer gewissen Prüfung ein.

Herr X entwickelt nun die Logikschaltung vom Typ UND weiter und optimiert dabei die notwendige Anzahl an Neuronen und die notwendige Anzahl an Lessons. Nach Fertigstellung landet sie im i-Netz.
Der Netzmanager schaut in die Runde (im i-Net) und findet die neue Version. Nach der Bewertung (besser als das bisherige) wird die alte Version durch die neue Ersetz.

Anmerkung zu den Hilfedateien. Da die Hilfedateien nur in englisch sind und viel Fachbegriffen aus dem KI-bereich vorhanden sind - sind sie für Einsteiger nur schwer zu verstehen.


Ich hoffe, ich habe nicht allzusehr in die "Zukunft geschaut" und konnte doch einige Anregungen zur Weiterentwicklung von MemBrain geben.
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 und herzlich Willkommen!

Vielen Dank für die Ideen, besonders die erste (Sub-Netze einbinden und als solche in MemBrain verwalten) kommt mir auch immer mal wieder in den Sinn.
Das ist aber alles andere als eine kleine Änderung und so schnell wird das noch nichts werden. Aber aufgeschoben ist definitiv nicht aufgehoben!

Was es aber immerhin schon gibt: Mann kann ein zweites Netz zum gerade geöffneten hinzufügen und diese auch manuell 'zusammenmergen', in dem man die (natürlich bereits trainierten) Links umhängt. Die Hilfe enthält dazu auch ein kleines Beispiel (Kapitel 'Neural Networks - Merging Nets').
Ein echtes Verwalten als Subnetz gibt es aber nicht, es entsteht eben ein neues, größeres Netz.

Auch kann man bestimmte Bereiche von Netzen für den Teacher sperren (Eigenschaft 'Lock' der Neuronen und der Links), so dass die betreffenden Elemente beim Training nicht verändert werden. Das 'Subnetz' bleibt also in seiner Funktion innerhalb des Gesamtnetzes erhalten, obwohl das Gesamtnetz trainiert wird.

Viele Grüße
Thomas Jetter
Bauchhirn
Posts: 2
Joined: Thu 7. Jan 2010, 15:36

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

Post by Bauchhirn »

Hallo Thomas,

ich habe die Dateifunktion zum Hinzufügen eines Netzes nach dem Posten gefunden. Wie ich feststellen konnte, können sogar mehrere fertige Netze dazugeladen werden. Diese Netze sind eben als eigenständiges Netz nicht erkennbar aber man kann sie mit den restlichen Neuronen verbinden und hat dadurch den gewünschten Effekt.

Als Vorbereitung für den Netzmanager ist es ein Schritt in die richtige Richtung. Als nächsten Schritt - denk ich wär es ein dazuladbares Netz als solches zu behandeln. Dabei können dann die Eigenschaften für alle Neuronen des dazugeladenen Netzes über die Eigenschaft des "Netzmodules" angepaßt werden.


Dann hab ich so noch einige Fragen
- Ist es möglich mit dem Trainings-Editor Lektionen zu erzeugen also Inputwerte zufällig erzeugen und dann in den dazugehörigen Outputs die Werte von Hand einzutragen? (Beispiel: AND-Logikfunktion mit 4 Eingängen und einen Ausgang. die Trainingstabelle kann auf Knopfdruck mit 12 unterschiedlichen Eingangswerten zufällig erzeugt werden und ich kann die Outputs dann entsprechend eintragen)

- Kann ich an Ein-/Ausgängen auch Ganzzahlen verwenden? ich kann mir vorstellen das intern mit Gleitkommazahlen gearbeitet wird und an der Schnittstelle kann man einstellen was rein- bzw rauskommen soll.

- Kann das Tool "MemBrain Picture-Drivers" so angepaßt werden, das es als Eingang aber auch als Ausgang verwendet werden kann? (Denk ich an den Schüler an der Tafel der die Rechenaufgabe 10 + 4 rechnen soll. Er ließt sie, rechnet und schreibt das Ergebnis an die Tafel. Ich weiß sonst keinen anderen Weg Zahlen, Buchstaben oder gar Worte auszugeben (ohne Hilfsmittel Wertetabelle Wert-Wort).

Viele Grüße
Bauchhirn
hww
Posts: 7
Joined: Mon 19. Oct 2009, 13:42

Re: Vorschläge für die nächste Version / Raw-CSV-Files

Post by hww »

Hallo Herr Jetter,

beim Importieren von Raw-CSV-Daten bekomme ich immer wieder die Fehlermeldung, dass I/O-Definitionen und Patterns nicht zueinander passen.
Wenn ich dann die Neuronen-Namen vom Netz übernehme, dann können die Daten verwendet werden.

Tatsächlich habe ich bisher einen einzigen Tippfehler in einem Namen der 384 Input-Neuronen gefunden und korrigiert - die Fehlermeldung bleibt aber.
Zwar lernt das Netz, die Daten sind also verwendbar, doch sind - wen wundert es? - die Ergebnisse nicht sehr ausagefähig (was natürlich
alle möglichen Gründe haben kann). Natürlich wäre es sehr angenehm den vom Programm monierten Fehler zu finden um diesen auszuschließen,
doch ist das nicht so einfach, denn ich habe mich daran schon recht lange abgearbeitet.

Sehr hilfreich wäre da eine erweiterte Fehlermeldung, die angibt, bei welchem Input- oder Outputneuron der Fehler auftritt und das Membrain dieses Neuron angibt.
Wenn man dann beispielsweise weiß, das ab dem 185. Input-Neuron in der soeben gelesenen Zeile XXXXX der CSV-Datei etwas nicht mehr stimmt, lässt sich der
Fehler ganz schnell erkennen und beheben.

In der Tat liegt hier offenbar ein recht verzwicktes Problem für mich vor: der Lesson-Editor gibt mir ja die Möglichkeit, mir Pattern für Pattern anzusehen und diese mit
den Raw-CSV-Daten Zeile für Zeile zu vergleichen. So fand ich schließlich auch den oben genannten Fehler .. Alles andere sieht hingegen bei den Stichproben,
die ich durchführte sehr vernünftig aus. Nur stichprobenartigen Überprüfungen deshalb, da es hierbei um rund 10.000 Patterns mit jeweils 384 Eingangsneuronen
geht, die jedes für sich einzeln überprüft werden müssten.

Natürlich habe ich es auch mit CSV-Dateien versucht, die nur aus einem Datensatz bestehen. Die Fehlermeldung bleibt. Beim besten Willen ist es mir nicht gelungen,
einen weiteren Fehler in den Daten zu finden. Es ist natürlich nicht auszuschließen, dass ich mehrmals den Fehler übersehen habe und gerade deshalb käme hier eine
erweiterte Fehlermeldung sehr gelegen.

Vielleicht können Sie da in der kommenden Version etwas machen ?

Vielen Dank für Ihre Bemühungen &

Schöne Grüße,
hww
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 »

hww wrote:Sehr hilfreich wäre da eine erweiterte Fehlermeldung, die angibt, bei welchem Input- oder Outputneuron der Fehler auftritt und das Membrain dieses Neuron angibt.
Eine etwas verbesserte Fehlermeldung wäre hier bestimmt machbar, ja, ich werde einmal schauen, ob ich in einer der nächsten Versionen so etwas unterbringen kann.

Einstweilen können Sie aber auch ein kleines MemBrain-Skript schreiben, dass die nicht-zuordbaren Namen zwischen geladenen Lesson und dem geladenen Netz auflistet und/oder in eine Datei exportiert, so dass Sie diese leicht identifizieren und korrigieren können.

Haben Sie sich mit der Skript-Sprache schon einmal beschäftigt? Ich werde unabhängig davon einmal solch ein kleines Skript aufsetzen und im Forum posten, das ist als Zwischenlösung bestimmt hilfreich. Sobald ich Zeit dazu gefunden habe, poste ich hier den Link zum Skript.

Viele Grüße,
Thomas Jetter
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 »

Ein Skript zur Kompatibilitätsprüfung gibt es jetzt im Forum unter folgendem Link:

viewtopic.php?f=13&t=64&p=350#p350

Viel Erfolg damit und viele Grüße
Thomas Jetter
hww
Posts: 7
Joined: Mon 19. Oct 2009, 13:42

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

Post by hww »

Guten Abend Herr Jetter,

tausend Dank - das ging ja schnell wie der Blitz!
Ich bin sehr gespannt darauf, was dabei herauskommt ..

Schöne Grüße,
HWW
IronLife
Posts: 2
Joined: Sun 28. Oct 2012, 00:15

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

Post by IronLife »

Es giebt ein sehr neues trainings verfahren namens Hessian-Free-Optimacion das sehr gut bei Netzten mit schleifen funktioniert währe es möglich das zu integrieren?
oder vl. sogar die möglichkeit zu implementieren das man selbst geschriebene trainer verwendet ? entweder über die skriptsprache oder vl. sogar über das einbinden von selbst geschriebenen dlls ? die ein bestimmtes interface implementieren?

P.S Membrain ist wirklich ein großartiges programm das unglaublich viel funktionalitäten enthält die bestimmt unglaublich schwer waren zu programmieren da ich mich auch selbst einbisschen damit beschäftigt habe sowas in der art zu machen weis ich wie schwer allein die basis funktionen gewesen sein müssen. dafür nochmal sehr großes lob :) darf ich fragen in welcher sprache es geschrieben wurde ?
Post Reply