Page 1 of 1

Anwendung des Universellen Trainings- und Validierungsscripts

Posted: Fri 13. Mar 2020, 19:54
by Nils
Hallo zusammen,

ich schreibe momentan meine Bachelorarbeit und möchte einen Winkelsensor optimieren, wofür ich Membrain verwenden soll. Ich bin kompletter Anfänger und beschäftige mich erst seit einigen Wochen damit.
Die vorhandenen Daten des Sensors habe ich schon eingeteilt in Trainings- und Validierungsdaten. Ein NN habe ich erstellt und trainiert, jedoch gibt es Probleme beim validieren.

Ich bin wie folgt vorgegangen:

Trainieren

Membrain laden
Input, hidden und output Neuronen erstellen
Verbinden
Laden der Trainingsdaten
Teach/ Lesson Editor / Membrain csv files
Syncmit Net -> names to net
Normalization / Randomize Net
Show Net Error View
Start Teacher (x mal laufen lassen)
Speichern des Netzes

Validieren

Membrain laden
Laden der Validierungsdaten
Teach/ Lesson Editor / Membrain csv files
Syncmit Net -> names to net
Output Data ausschalten?
...
weitere Schritte fehlen

Jetzt ich bin im Forum auf das Trainings- und Validierungsscript gestoßen und wollte es testen, jedoch werden die Trainings- und die Validierungslessons als (MBL files) benötigt. Ich habe aber CSV files als Trainings- und Validierungslessons...
Mein erster Versuch war dann, das Script zu ändern, damit keine MLB Datei geladen werden soll, sondern eine CSV Datei. Hat sich leider als Fehlversuch herausgestellt... Ist es möglich das Script mit CSV Dateien zu verwenden oder müssen die in MBL Dateien umgewandelt werden?
Im Anhang befindet sich ein Beispiel der Trainings- und Validierungsdaten, zudem auch das NN.

Wäre echt toll wenn mir jemand von euch helfen könnte.

Mit freundlichen Grüßen

Nils

Re: Anwendung des Universellen Trainings- und Validierungsscripts

Posted: Sat 14. Mar 2020, 11:52
by TJetter
Hallo Nils,

grundsätzlich gibt es zwei Möglichkeiten, über das Scripting mit deinen Lessons zu arbeiten:

1.) Verwenden von mbl-Dateien
- Einfach im Lesson Editor über dessen Menü <Lesson Files>, Menüpunkt <Save Current Lesson As...> die aktuelle, z.B. aus csv importierte Lesson als mbl-Datei (Lesson-Datei) abspeichern. Damit kann das Skript direkt arbeiten.
Ein mbl File kann zu jeder Zeit wieder im Lesson Editor geladen und als csv abgespeichert werden. Es bringt also keinen Nachteil, mit mbl Dateien zu arbeiten.

2.) Anpassen des Scripts auf csv Dateien
- Das Script verwendet das Kommando <LoadLesson> um mbl-Files zu laden. Zum Importieren von MemBrain CSV Files muss <LoadLesson> durch <ImportLesson> ersetzt werden. Einfach alle diese Aufrufe ersetzen.

Für Roh-CSV Dateien heißt das entsprechende Kommando <ImportLessonRaw>. Dazu muss aber vorher die korrekte Anzahl Inputs und Outputs im Lesson- Editor eingestellt worden sein (z.B. über 'Names From Net'). Deine csv-Files sind aber offensichtlich MemBrain CSV Files und benötigen das somit nicht.


Zum händischen Validieren (also ohne Script) einfach Netz und Lesson laden, den Pattern Error Viewer öffnen über <Teach><Pattern Error Viewer>, dann aus dem MemBrain Hauptmenü <Teach><Evaluate Net Error> ausführen und dann im Pattern Error Viewer den Button <Export Validation> wählen.

Viele Grüße und viel Erfolg

Re: Anwendung des Universellen Trainings- und Validierungsscripts

Posted: Sat 14. Mar 2020, 22:48
by Nils
Hallo Herr Jetter,

vielen Dank für die schnelle Antwort.

das händische Validieren hat funktioniert, doch mit dem Script gibt es leider immer noch Probleme...
Ich habe es einmal mit den mbl-Dateien versucht und dann noch einmal versucht indem ich das Script auf die CSV Dateien angepasst habe <ImportLesson>

es kam jeweils folgende Meldung:


<Abortion due to command execution error

Details: Teacher Error: Lesson is not in correct format for net!>

Ich verstehe nicht ganz warum das nicht funktioniert hat, die Trainings- und Validierungsdateien kann ja händisch problemlos importieren, ohne das es ein Problem mit dem Format gibt.

Viele Grüße

Re: Anwendung des Universellen Trainings- und Validierungsscripts

Posted: Sun 15. Mar 2020, 09:19
by TJetter
Die Fehlermeldung des Teachers kommt auch beim manuellen Vorgehen: Da ist ja auch ein 'Names From Net' oder ein 'Names To Net' notwendig, um die Lessons mit dem Netz zu synchronisieren. Das kann man sich ersparen, wenn man nach dem 'Names From Net' oder 'Names To Net' das Netz bzw. die Lesson neu abspeichert.
Der Sync ist notwendig, weil MemBrain die Zuordnung zwischen Spalten der Lesson und den jeweiligen Inputs/Outputs des Netzes kennen muss. Das geht über Namensauflösung. Wenn also die Namen des Netzes (Inputs bzw. Outputs) und der Lesson-Spalten nicht exakt übereinstimmen, dann weiß MemBrain nicht, welche Spalte der Lesson mit welchem Input- bzw. Outputneuron verknüpft werden soll.

Wenn die Lessons oder das Netz aus irgendeinem Grund nicht neu abgespeichert werden sollen, dann kann man den Sync auch in das Skript mit einbauen. Hier der entsprechend modifizierte Codeabschnitt aus dem Script:

Code: Select all

// Load validation lesson to lesson #2
    SelectLesson(2);
    ImportLesson(sValidateLessonName);
    NamesFromNet();
    
    // Load train lesson to lesson #1
    SelectLesson(1);
    ImportLesson(sTrainLessonName);
    NamesFromNet();
--> Wie man sieht, ist nach jedem 'ImportLesson' ein 'NamesFromNet' Aufruf hinzugekommen. Wenn der Sync in der anderen Richtung gewünscht ist, dann durch 'NamesToNet' ersetzen.

Viele Grüße