Lern Methode, Hidden Neuronen, Ansicht

Sie haben ein bestimmtes Projekt zu bearbeiten und wissen nicht, wie Sie an die Aufgabe heran gehen sollen? Sie sind sich nicht sicher, ob Ihr Netzentwurf zu Ihrem Problem passt oder ob es da Optimierungsmöglichkeiten gibt? Ist es überhaupt sinnvoll an Ihre Daten mit einem NN basierten Ansatz heranzugehen? Ist MemBrain das richtige Werkzeug für Ihr Problem und Ihre Infrastruktur?

Hier ist der richtige Platz für diese Art von Fragen.
Post Reply
Martel
Posts: 2
Joined: Wed 11. May 2016, 08:55

Lern Methode, Hidden Neuronen, Ansicht

Post by Martel » Wed 11. May 2016, 09:09

Guten Morgen,

ich arbeite mich gerade mit Membrain ein. Zuerst möchte ich mich bei allen hier Bedanken. Aufgrund eurer Hilfe bin ich weit gekommen.

Allerdings sind diese 3 Fragen noch offen:

Ich habe derzeit nur 9 Datensätze bestehend aus 4 Inputs (Stellgrößen) die zu 9 Outputs (Messwerte) werden.

Aufbau:
4 Inputs -> 5 Hidden -> 9 Outpus

Wonach richtet sich die Anzahl "Hidden" eigentlich genau?

Lernmethode
Welche Lernmethode würdet ihr empfehlen? Die derzeit besten Ergebnisse bekomme ich mit

RPROP
Repetitations per Lesson 1
Repetitions per Pattern 1

Leider sind einige Output vorhersagen Meilenweit entfernt. Die Qualität der Daten ist nicht gut, und die Anzahl ist auch nicht gut. Dessen bin ich mir bewusst. Mir reicht es, wenn eine Tendenz am Ende raus kommt. Wert wird Höher wenn das und das passiert. Aber selbst das funktioniert nicht. Obwohl die Messdaten das sehr deutlich hergeben.

Und was bewirkt Lesson Pattern selection? - effektiv
Ordered
Random Selection
Random Order

Oh und noch eine kleine Frage:
Obwohl ich alles beim Lernen etc. Anzeigen lasse, ändern sich nie die Werte der Input Neuronen. Wird die Anzeige nie aktualisiert?
Die Hidden und Output Neuronen ändern ihre Ansicht(zahlenwerte).

User avatar
TJetter
Posts: 318
Joined: Sat 13. Oct 2012, 12:04

Re: Lern Methode, Hidden Neuronen, Ansicht

Post by TJetter » Wed 11. May 2016, 17:42

Hallo,
Martel wrote:Wonach richtet sich die Anzahl "Hidden" eigentlich genau?
Hier muss ich immer wieder die gleiche Antwort geben: Es hilft nur probieren. Dabei klein anfangen und nur mehr Hidden dazunehmen, wenn die Trainingsmenge nicht sauber erlernt wird. D.h., die kleinste Anzahl Hidden, mit der die Trainingsmuster gut erlernt werden ist i.d.R. die beste. Mehr Hidden-Neuronen erhöhen die Speicherkapazität des Netzes und steigern damit die Gefahr des 'Auswenidglernens', das Netz generalisiert dann meist schlechter.
Martel wrote:Welche Lernmethode würdet ihr empfehlen? Die derzeit besten Ergebnisse bekomme ich mit
In den meisten Fällen ist RPROP der beste Algorithmus und vor allem sehr unkritisch in der Parametrierung. Fast immer kommt man mit der Default-Parametrierung hin und es muss nichts verändert werden.
Martel wrote:Leider sind einige Output vorhersagen Meilenweit entfernt. Die Qualität der Daten ist nicht gut, und die Anzahl ist auch nicht gut. Dessen bin ich mir bewusst. Mir reicht es, wenn eine Tendenz am Ende raus kommt. Wert wird Höher wenn das und das passiert. Aber selbst das funktioniert nicht. Obwohl die Messdaten das sehr deutlich hergeben.
Martel wrote:ich habe derzeit nur 9 Datensätze
Das ist absolut zu wenig. Damit sehe ich offen gestanden keine Chance, ein NN auch nur halbwegs zu trainieren: Wenn das NN bereits vier skalare Eingangsgrößen hat, dann ist der Datenraum mit nur 9 Mustern nicht im Entferntesten ausreichend abdedeckt. Ohne das Problem genauer zu kennen, halte ich alles unterhalb von 100 (gut gewählten!) Datensätzen für aussichtslos. Dann benötigt man auch noch ein paar gute Datensätze zum Validieren, die natürlich nicht Teil der Trainingsmenge sein dürfen.
Was bedeutet 'die Qualität der Daten ist nicht gut?' Werden die wenigen Datensätze vom NN bereits gar nicht sauber erlernt, oder ist nur die Validierung schlecht?
Martel wrote:Und was bewirkt Lesson Pattern selection? - effektiv
Ordered
Random Selection
Random Order

'Ordered' sollte nur bei einer Zeitreienthematik in Verbindung mit einem zeitvarianten Netz verwendet werden. In diesem Fall ist es wichtig, die Muster dem Netz in immer der selben definierten Reihenfolge zu präsentieren, da das Netz seinen neuen Zustand ja auch in Abhängigkeit seiner Verarbeitungshistorie bestimmen soll.
Für alle anderen Probleme schlage ich 'Random Order' vor. Damit wird pro Durchlauf einer Lesson jedes Muster immer genau ein mal ans Netz gelegt, lediglich die Reihenfolge variiert zufällig ('Ziehen ohne Zurücklegen'). Bei 'Random Selection' wird hingegen 'Ziehen mit Zurücklegen' ausgeführt. Damit kann es sein dass in einem Durchlauf ein Muster mehrfach und andere gar nicht angelegt werden. Diese Einstellungen empfehle ich eigentlich nie, sie ist eher von akademischem Interesse, denke ich.
Martel wrote:Oh und noch eine kleine Frage:
Obwohl ich alles beim Lernen etc. Anzeigen lasse, ändern sich nie die Werte der Input Neuronen. Wird die Anzeige nie aktualisiert?
Die Hidden und Output Neuronen ändern ihre Ansicht(zahlenwerte).
Das kommt daher, dass MemBrain pro Trainingsdurchlauf nur genau einmal die Anzeige aktualisiert, nämlich immer dann, wenn das gerade im Lesson Editor ausgewählte Pattern angelegt und berechnet wurde. Da das im Hinblick auf die Aktivitäten der Eingangsneuronen immer die selben Werte sind, ändert sich hier nichts.
D.h., am besten mal die folgenden zwei Optionen ausprobieren:
1.) Während des Trainings im Lesson Editor das momentan aktive Pattern wechseln (Pfeiltasten auf der rechten Seite des LE).
2.) Die SHIFT-Taste drücken und halten. Der Cursor wird zum Kreuz. Dann linke linke Maustaste drücken und gedrückt halten und die Maus bewegen. Damit kann man sich in MemBrain durch die ganze Zeichnungsfläche 'hangeln'. (Das geht übrigens auch mitten im Editieren, wenn z.B. Links zwischen Neuronen gezogen werden). Wenn man das während des Trainings des Netzes macht, erzwingt man permanent ein Bildschirmupdate. Das führt dazu, dass man sieht, wie der Teacher alle Trainingsmuster permanent abarbeitet.

Viele Grüße
Thomas Jetter

Martel
Posts: 2
Joined: Wed 11. May 2016, 08:55

Re: Lern Methode, Hidden Neuronen, Ansicht

Post by Martel » Tue 17. May 2016, 15:13

Vielen Dank für die ausführliche Antwort. Und Entschuldigung für die späte Antwort.

Ich werde in den kommenden Tagen weiter mit dem Netz rumspielen und das eine oder andere Versuchen.


Zu ihrer Rückfrage:

Schlechte Qualität bedeutet -> Mein Input Steigt und die Messwerte bei Output schwanken sehr.

Beispiel:

Die Temperatur steigt (input) -> Output B steigt euch. aber ob er +1 oder +3 steigt (von 10) kann ich nicht sagen. Da die Analyse so sehr schwankt. Aber das ist auch nicht das Ziel gewesen. Ein Steigen des outputs reicht schon als "Aussage". Es ist aber ein Hobby Projekt.

Als nächstes Versuche ich zwei Neuronale Netzwerk von Außen (selbstgeschriebene Software) zu steuern um Input und Output grafisch anzuzeigen ( "just in Time" ). Mal schauen was die Software hier so kann :geek:

Das kommt daher, dass MemBrain pro Trainingsdurchlauf nur genau einmal die Anzeige aktualisiert, nämlich immer dann, wenn das gerade im Lesson Editor ausgewählte Pattern angelegt und berechnet wurde. Da das im Hinblick auf die Aktivitäten der Eingangsneuronen immer die selben Werte sind, ändert sich hier nichts.
D.h., am besten mal die folgenden zwei Optionen ausprobieren:
1.) Während des Trainings im Lesson Editor das momentan aktive Pattern wechseln (Pfeiltasten auf der rechten Seite des LE).
2.) Die SHIFT-Taste drücken und halten. Der Cursor wird zum Kreuz. Dann linke linke Maustaste drücken und gedrückt halten und die Maus bewegen. Damit kann man sich in MemBrain durch die ganze Zeichnungsfläche 'hangeln'. (Das geht übrigens auch mitten im Editieren, wenn z.B. Links zwischen Neuronen gezogen werden). Wenn man das während des Trainings des Netzes macht, erzwingt man permanent ein Bildschirmupdate. Das führt dazu, dass man sieht, wie der Teacher alle Trainingsmuster permanent abarbeitet.
Das bedeutet ich berechne die ganze Zeit nur Lesson 1 Pattern 1 ? :o

Currently Edited Training Lesson 1 - 7 Pattern (Training)
Currently Edited Training Lesson 2 - 2 Pattern (Validierung)
Currently Edited Training Lesson 3 - 5 Pattern (Thinking)

Number of Lessons ist 4 - weiß aber nicht so genau warum.. Ich habe diesen Code aus dem "Käse-Beispiel" genommen.

Code: Select all

const string Net_File = "doe.mbn";
const string Train_Lesson = "Train.csv";
const string Vali_Lesson = "Vali.csv";
const string Think_Lesson = "Think.csv";

void main()
{
   OpenNet(Net_File);
   SetLessonCount(4);
   SelectLesson(4);
   ClearLesson();
   SelectLesson(1);
   ImportLessonRaw(Train_Lesson);
   SelectLesson(2);
   ImportLessonRaw(Vali_Lesson);
   SelectLesson(3);
   ImportLessonInputsRaw(Think_Lesson);
   SelectLesson(1);
   SelectNetErrLesson(2);
   ShowLessonEditor(false);
}

Post Reply