Prozessoptimieren

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.
User avatar
Seppy
Posts: 47
Joined: Fri 5. Dec 2008, 04:48
Location: 90537 Feucht

Re: Prozessoptimieren

Post by Seppy »

Hallo jojo,

Thomas hat ja schon alles dazu beantwortet.

Ich schlag mich z.B. mit der Vorhersage des DAX (Deutscher Aktien Index) herum, und muß Dir sagen, daß meine Ergebnisse mit z.Z. 43 Trainings-Datensätzen schon wesentlich besser aussehen als bei Dir mit über 400 Datensätze.
Es kommt also auf die Beeinflussung/Abhängigkeit <Inputs zu Outputs> an und nicht auf die Anzahl der Trainingdaten ; Natürlich sollten es etwas mehr als 43 sein.
(Welche Inputs beeinflussen/haben eine Auswirkung auf den Output).

Noch ein kleiner Tip:
Mit mehr als einem OUTPUT hatte ich NIE Erfolg.
Also versuch erstmal nur einen Output (den wichtigeren) zu berechnen, wenn das mal geht, kannst Du den zweiten immer noch einfügen.

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.
jojo
Posts: 12
Joined: Mon 27. Apr 2009, 12:40

Re: Prozessoptimieren

Post by jojo »

Hallo zusammen,

trotz den ausführlichen Antworten, tauchen bei mir immer noch Bedienungsschwirgkeiten auf. Da ich im Internet nichts gefunden habe, damit ich mir meine Fragen selbst beantworten könnte wende ich mich nun wieder an euch. :oops:

Also mitlerweile habe ich eine Netz mit allen Daten, die mir zur Verfügung stehen, erstellt. Dieses Mal funktioniert es auch und meiner Meinung nach kann sich der "Net Error" auch sehen lassen. :D

Allerdings sind mir einige Dinge noch nicht ganz klar:

1) Wie werden die einzelnen Skripte ( z. B. Load.as, Trainig.as, Thinking.as...) erstellt.

2)Ich habe in meinem Netz eine HIDDEN-Ebene eingefügt. Wirkt sich diese Schicht irgendwie auf das Netzt aus oder ist die nur gut, damit man eine bessere Übersicht bekommt?

3) Kann man aus dem Netz auch ablesen, welcher Parameter den größten Einfluss auf den Output hat? Sagen mir das die Farben der Verbindungslinien?

4) Was sagen mir die Zahlen unter den Units?

5)Wie lange muss ich mein Netz eigentlich trainieren lassen und wann ist es trainiert? Das hängt wahrscheinlich vom "Net Error" ab.

Wie ihr sehen könnt, sind bei mir noch einige Fragen offen. Wenn ihr einen guten Link kennt, bei dem ich mehr über NN und die Bedienung erfahren kann, könnt ihr mir den gerne schicken.

Im Anhang habe ich mein erstelltes Netz beigefügt, wäre nett wenn jemand mal dürber sehen könnte, um zu sehen ob sich auch kein Fehler eingeschlichen hat.

Gruß jojo
User avatar
Seppy
Posts: 47
Joined: Fri 5. Dec 2008, 04:48
Location: 90537 Feucht

Re: Prozessoptimieren

Post by Seppy »

Hallo jojo,

1) Wie werden die einzelnen Skripte ( z. B. Load.as, Trainig.as, Thinking.as...) erstellt.
Die Dateien mit der Endung ".as" sind ausführbare Scripte/MemBrain Programme z.B. "Load_Lessons.as" und "Traintime.as"
Was Du meinst sind die Lessons (Die CSV-Dateien mit Deinen Daten).

Ich mach das so:
Ich habe eine "Excel oder OpenOffice" Datei, diese enthält z.B. 4 Tabellen (Norm, Train, Vali und Think).
Diese Tabellen mußt Du, wenn sie fertig sind, dann als CSV-Datei abspeichern oder exportieren.
Das sind dann reine Text-Dateien, bei denen jeder Wert durch ein Trennzeichen vom nächsten Wert getrennt ist z.B. so:

Wasser Dos. In %;TM;Fett abs;F.i. Tr.;pH;EW;Lactose;Konsistenz;Gesamtkäseanteil in %;Anteil Magerkäse jung in %;Alter junger Magerkäse;Visosität;Cremaniveau[l];Produktpumpe nach Crema [l/h];Dampfmenge [kg/h];Durchfl. Erhitzer [l/h];Temp. HH 1 [°C];Temp. HH 2 [°C];Temp. Umschaltventil [°C];Vakuum [bar];Temp. Steril-behälter [°C];Drehzahl Crema [%]
1;51,1;28,4;55,6;5,69;10,32;8,09;5;25,75;73,05;7,5;48,6;63,1;1684;219,5;1558,3;84,4;143,9;108,5;-0,37;92,2;30
1,8;50,8;28,9;56,8;5,71;9,56;7,48;5;25,75;73,05;7,5;152;63,1;1562,5;214,7;1581,8;85,3;143,8;108,1;-0,42;92;30

Das ist bei Deinen Daten schon richtig:
Trennzeichen = Semikolon ";"
Dezimaltrenner = Komma ","

Norm.csv ist nur zum normalisieren des Netzes, in dieser Datei sollten ALLE möglicherweise vorkommenden IN und Output Werte enthalten sein.
Damit wird in die IN/OUTput Neuronen nur der minimal und maximal mögliche Wert gespeichert (Du kannst dazu evtl. auch die Train.csv verwenden).

Jetzt kopierst Du alle Daten von der Tabelle Norm in die Tabelle Train.
Danach entfernst Du ca. 5-10 % der Daten am Ende der Train-Tabelle (ausschneiden, NICHT kopieren) und fügst diese in die Tabelle Vali ein.
Mit der Tabelle Vali (Validierungs-Daten) soll das Netz nämlich mit NICHT-gelernten Daten geprüft werden.

In die Tabelle Think trägst Du (wenn Dein Netz gut genug trainiert ist) NUR Deine Inputs ein, KEINEN Output, den soll Dir ja das Netz sagen, mit denen Du eine Voraussage machen möchtest.


2)Ich habe in meinem Netz eine HIDDEN-Ebene eingefügt. Wirkt sich diese Schicht irgendwie auf das Netzt aus oder ist die nur gut, damit man eine bessere Übersicht bekommt?
MIT ÜBERSICHT HAT DAS NICHTS ZU TUN.
In der Netzstruktur bist Du an nichts gebunden, Du kannst auch 2,3,4 Hiddenschichten einfügen, NUR OB DAS SINNVOLL IST ???
Du kannst es auch NUR mit IN/OUTputs versuchen.
Soweit ich das verstanden habe braucht das Netz aber eine gewisse Kapazität/Speicherplatz, es muß die Regeln Deiner Daten ja irgendwo festhalten.
Ist das Netz zu klein bleibt der NetError sehr hoch, das Netz kann nicht lernen, da es zu wenig Platz für die Informationen hat.
Ist das Netz zu groß, lernt es Deine Trainingsdaten einfach auswendig, auch nicht gut.
Du solltest also mit einem sehr kleinen Netz anfangen (ca. 2-3 Hidden-Neuronen), bleibt der NetError sehr hoch (Das merkst Du sehr schnell) fügst Du EIN weiteres Neuron in die Hiddenschicht ein.


3) Kann man aus dem Netz auch ablesen, welcher Parameter den größten Einfluss auf den Output hat? Sagen mir das die Farben der Verbindungslinien?
Die Farben sagen da, soweit ich weiss garnichts aus (Dachte ich am Anfang auch).
Die Linien/Links und die Neuronen sind GEWICHTE, die bei jeden Teachdurchlauf angepasst werden.
(War ein Link/Neuron gut, erhält es ein höheres Gewicht, war es schlecht, ein niedrigeres Gewicht, naja zumindest so änlich).
Es giebt im Downloadbereich von MemBrain, unter "VBA DLL-Beispiel" das Excel-Makro "MBInput-Qualify.zip", das soll genau das machen.
Ich kriegs leider nicht zum laufen.


4) Was sagen mir die Zahlen unter den Units?
Das soll Thomas beantworten, er kennt sich da besser aus.


5)Wie lange muss ich mein Netz eigentlich trainieren lassen und wann ist es trainiert? Das hängt wahrscheinlich vom "Net Error" ab.
Genau das kannst Du mit dem Script Traintime.as herausfinden.
Du lädst Dein Netz.
Du lädst Deine Lessons/Daten.
Du startest Traintime.
Dann wird Dir etwa sowas im Tracewindows angezeigt:
Der minimale Net Error von: 0.35557 wurde bei einer Trainingszeit von: 1 Sekunden erreicht.

Der minimale Net Error von: 0.348831 wurde bei einer Trainingszeit von: 1 Sekunden erreicht.

Der minimale Net Error von: 0.348344 wurde bei einer Trainingszeit von: 1 Sekunden erreicht.

Der minimale Net Error von: 0.337417 wurde bei einer Trainingszeit von: 35 Sekunden erreicht.

Der minimale Net Error von: 0.309332 wurde bei einer Trainingszeit von: 35 Sekunden erreicht.

Der minimale Net Error von: 0.309085 wurde bei einer Trainingszeit von: 48 Sekunden erreicht.

Der minimale Net Error von: 0.307378 wurde bei einer Trainingszeit von: 48 Sekunden erreicht.


Das kannst Du jetzt 1 Minute, 1 Stunde, 1 Tag oder 1 Jahr laufen lassen, erfolgt längere Zeit (1-15 Minuten) keine neue Zeile, hast Du etwa die Zeit, wie lange Du das Netz trainieren mußt.
Natürlich solltest Du einige male testen.
Du kannst jetzt auch den erreichten min. NetError als Abbruchkriterium für den Teacher verwenden.
Im Menü Teach > Teacher Manager > Edit > Target NetError (for Auto Teacher).
Jetzt bricht der Teacher den Lernvorgang ab, sobald dieser NetError erreicht wurde.

Du solltest auch darauf achten, daß beim Output in der Vali-Tabelle unterschiedliche Werte sind, bei Deiner Norm.csv waren die letzten Outputwerte alle bei 36.
Das ergiebt im Vali-Chart natürlich NUR einen geraden Strich.

2;49,5;28;56,4;5,8;9,18;8,13;5;24,59;81,33;0;0;76,1;69,4;131,5;832,8;143;85,3;99,8;-0,43;89,8;36
3;49,2;28,4;57,8;5,83;8,47;7,91;5;24,59;81,33;0;0;89,1;1579,9;227,4;1554,7;32,2;144,1;108,5;-0,4;91,2;36
2,5;49,1;27,8;56,6;5,83;9,41;7,4;6;24,59;81,33;0;70;149,6;1475,7;157,1;823,4;79;142,8;101,3;-0,39;89,1;36
3;49,4;28;56,6;5,82;9,17;7,98;6;24,59;81,33;0;85,2;96,2;1597,2;192,6;1577,1;143;84,1;106,8;-0,42;89,9;36
3,5;48,8;27,3;56;5,81;9,46;7,45;5;24,59;81,33;0;102,6;73,1;1579,9;220,6;1581,8;32,4;143,1;109,2;-0,39;89,9;36
3,5;48,4;27,6;57;5,81;8,62;7,55;5;24,59;81,33;0;94,4;99,2;1666,7;169,4;801;74,3;143;102,3;-0,41;89,8;36
2,7;49,2;27,8;56,5;5,75;8,99;7,92;5;24,59;81,33;0;87,5;85,2;1597,2;150,8;966,7;142,5;85;101,7;-0,38;89,3;36
2,7;49,5;28;56,7;5,76;9,08;8,31;5;24,59;81,33;0;72,3;19,8;1545,1;0;2386,5;34,4;15,7;51;-0,41;82,1;36

Ich hab alle Daten mal mit der Spalte "M" (Cremaniveau[l]) aufsteigen sortiert.
Ich schick Dir mal alles zurüch, hoffentlich hilfts.
In Tabellen.xls sind alle Daten.

Und noch ein guter Link:
http://www.dkriesel.com/science/neural_networks

PS: Es sieht schon VIEL BESSER aus als beim letzten Mal...

Gruß Seppy
jojo.zip
(20.21 KiB) Downloaded 707 times
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: Prozessoptimieren

Post by Admin »

Vielen Dank für die Antworten, Seppy! Ich hab unten versucht, noch das eine oder andere zu klären...,
Seppy wrote:1) Wie werden die einzelnen Skripte ( z. B. Load.as, Trainig.as, Thinking.as...) erstellt.
Vielleicht meinst Du ja doch die Skripte selbst. In diesem Fall lautet die Antwort: Das sind Programme für MemBrain, die in diesem Fall Seppy geschrieben hat.
MemBrain lässt sich über solche Skripte programmieren. Kann man machen, muss man aber nicht. Du kannst in MemBrain auch alles händisch machen.
Seppy wrote:Danach entfernst Du ca. 5-10 % der Daten am Ende der Train-Tabelle (ausschneiden, NICHT kopieren) und fügst diese in die Tabelle Vali ein.
Hier ist allerdings Vorsicht geboten: Wenn Die Daten in Deiner Train-Tabelle zufällig (d.h., nicht geordnet) sind, dann geht das so. Wenn die Train-Tabelle allerdings irgendeiner Ordnung folgt, dann schneidest Du damit keinen repräsentativen Validierungsdatensatz heraus, sondern nur eine logisch ähnliche Gruppe von Mustern. Wichtig ist, dass die Validierungsdaten in etwa gleichverteilt sind wie die Trainingsdaten. Das Beste ist deshalb, zufällig Trainingsmuster abzuspalten.
Das kannst Du in MemBrain im Lesson-Editor machen: Lade die Datei Train in den Lesson-Editor. Dann im Lesson-Editor Menü 'Extras' - 'Split Current Lesson' wählen. Hier kannst Du nun eine Prozentsatz angeben, ich würde Dir mal 10% empfehlen. Wenn Du dann OK klickst, werden von der geladenen Lesson 10% der Pattern ZUFÄLLIG abgespalten und in eine neue Lesson verschoben. Jetzt speicherst Du die reduzierte Train wieder ab (z.B. wieder als csv über Lesson-Editor Menü), wählst die neu hinzugekommene Lesson aus (über die Navigationspfeile 'Currently Edited Lesson' im Lesson-Editor) und speicherst diese neue Lesson als Vali ab.
Seppy wrote:2)Ich habe in meinem Netz eine HIDDEN-Ebene eingefügt. Wirkt sich diese Schicht irgendwie auf das Netzt aus oder ist die nur gut, damit man eine bessere Übersicht bekommt?
MIT ÜBERSICHT HAT DAS NICHTS ZU TUN.
Netze ohne Hidden-Schicht können nur sehr einfache Funktionen approximieren. Sobald ein Netz eine Hidden-Schicht hat, kann es -mathematisch gesehen- jede beliebige Funktion approximieren. Eine Hidden-Schicht mach also auf jeden Fall Sinn und hat - wie Seppy korrekt gesagt hat - mit Übersichtlichkeit gar nichts zu tun.
Ob man mehr als eine Hiddenschicht benötigt, tja: Da scheiden sich die Geister... Ich habe schon Verbesserungen gesehen, bei manchen Anwendungen. Deshalb mein Ratschlag: Mit einer Hidden-Schicht und wenigen Neuronen anfangen und dann langsam mehr, wenn nötig. Mehr als zwei Hidden-Schichten sind aber meist nicht lohnend. Klein anfangen ist extrem wichtig: Ein zu großes Netz lernt 'auswendig' und damit generalisiert es bei neuen Daten hinterher schlecht. Ob Du erfolgreich bist, kannst Du immer nur daran messen, ob Dein Netz auf untrainierte Daten gut reagiert. Deshalb ist die Validierung mit nicht trainierten Daten so wichtig! In MemBrain kannst Du Dir übrigens schon während des Trainings den Fehler bzgl. der Validierungsdaten anzeigen lassen, d.h., Du sieht schon während des Trainings, ob das Netz gut generalisiert. Ich glaube, die Skripte von Seppy unterstützen das auch, oder?
Seppy wrote:3) Kann man aus dem Netz auch ablesen, welcher Parameter den größten Einfluss auf den Output hat? Sagen mir das die Farben der Verbindungslinien?
Direkt kannst Du das nicht ablesen. Es gibt aber das erwähnte Excel-Sheet, dass manche User allerdings unter Excel 2007 nicht zum Laufen bringen (siehe andere Threads hierzu). Ich habe noch kein Excel 2007 im Zugriff, deshalb kann ich dieses Problem noch nicht beheben. Unter Excel 2003 sollte es aber klappen.
Seppy wrote:4) Was sagen mir die Zahlen unter den Units?
Das ist die Aktivität des jeweiligen Neurons. Bei Input- und Output-Units sind das Deine angelegten Eingabewerte bzw. die Ausgabewerte, die das Netz liefert. Bei den verdeckten Units handelt es sich um einen normalisierten Wert, um diesen brauchst Du Dich nicht zu kümmern.
Wenn Du im Lesson-Editor (bei geladener Lesson) mal auf 'Think On Input' klickst, dann wirst Du sehen, dass die Eingabedaten des aktiven Patterns nun als Zahlen unter den Eingabeneuronen stehen, während die Antwort des Netzes auf dieses Muster an den Ausgängen zu finden ist. Wenn das Netz gut trainiert ist, dann sollten die Ausgabewerte nahe an denen im Lesson-Editor liegen, was bedeutet, dass das Netz dieses Muster beherrscht. Du musst diese Zahlen nicht anzeigen lassen, wenn sie Dich stören: Du kannst in den Eigenschaften jedes Neurons festlegen, ob seine Aktivität am Bildschirm angezeigt wird, oder nicht. Bei Hidden-Units deaktiviert man diese Einstellung normalerweise.
Seppy wrote:Du solltest auch darauf achten, daß beim Output in der Vali-Tabelle unterschiedliche Werte sind, bei Deiner Norm.csv waren die letzten Outputwerte alle bei 36.
Das ergiebt im Vali-Chart natürlich NUR einen geraden Strich.
Das ist genau das, was ich mit Gleichverteilung oben meinte, die Validierungsdaten müssen zufällig aus der Gesamtheit der Daten gewählt werden. Bei sortierten Datenreihen deshalb Lesson-Editor benutzen, wie oben beschrieben.
Außerdem ist es in diesem Falle gut, für das Training die Eigenschaft 'Lesson Pattern Selection' des Teachers auf 'Random Order' zu setzen. Dann werden die Muster der Train Lesson während des Trainings in zufälliger Reihenfolge gewählt, was in der Regel ein besseres Ergebnis erzeugt. Das geht natürlich nur in dem Fall, dass man keine Zeitreihen trainiert, ist also für Seppy nicht geeignet! Das darf nur verwendet werden, wenn die Trainings- und Validierungsmuster keinen Reihenfolgenbezug haben, den das Netz erlernen soll!Deshalb darf Seppy für seine Börsenkurse zum Erzeugen der Vali Lesson auch nicht die beschriebene Lesson-Editor Funktion verwenden, da diese zufällig Pattern auswählt. Bei Seppy's Zeitreihen entstünde da natürlich Chaos!
Seppy wrote:Im Anhang habe ich mein erstelltes Netz beigefügt, wäre nett wenn jemand mal dürber sehen könnte, um zu sehen ob sich auch kein Fehler eingeschlichen hat.
Ich werd's mir auch mal kurz ansehen, wenn Du nichts mehr hörst, dann habe ich keine Auffälligkeiten gefunden ;)

Viele Grüße,
Thomas
Thomas Jetter
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Prozessoptimieren

Post by Admin »

Hallo Jojo,

ich habe von Deiner (originalen) Train.csv mal 15 % abgespalten und dann mit RPROP trainiert.

Sieht gar nicht so schlecht aus (siehe Anhänge). Das Netz erlernt die Trainingsdaten sehr gut. Bei der Generalisierung (15 Validierungsdaten) sind gute Ansätze da, es gibt aber noch hohen Verbesserungsbedarf. Du brauchst auf jeden Fall mehr Datensätze!Hast Du dazu die Möglichkeit?
Verkleinern der Hidden-Schicht wäre auch ein guter Ansatz, es sieht schon ein wenig nach 'Auswendiglernen' aus.

Weiter so!
Viele Grüße,
Thomas
Attachments
ValiError.JPG
Pattern Error Viewer bzgl. Validierungsdaten
(52.01 KiB) Downloaded 26 times
TrainError.JPG
Pattern Error Viewer bzgl. Trainingsdaten
(50.78 KiB) Downloaded 28 times
Thomas Jetter
jojo
Posts: 12
Joined: Mon 27. Apr 2009, 12:40

Re: Prozessoptimieren

Post by jojo »

Hallo,

vielen Dank für euere schnellen und ausführlichen Antworten. Ohne euch wäre ich aufgeschmissen.
Admin wrote:Vielleicht meinst Du ja doch die Skripte selbst. In diesem Fall lautet die Antwort: Das sind Programme für MemBrain, die in diesem Fall Seppy geschrieben hat.
MemBrain lässt sich über solche Skripte programmieren. Kann man machen, muss man aber nicht. Du kannst in MemBrain auch alles händisch machen.
Also ja, ich meinte schon die Skripte. Es ist ein bisschen blöd wenn ich die nicht selber erstellen kann. Ich soll am Ende meiner Praktikumszeit zeigen wie ich vorgegangen bin. Daher sollte ich einen Weg finden ohne die Skripte auszukommen, obwohl ich sehr gern damit arbeite.

Was bedeutet das, man kann auch alles händisch machen?

Heißt das:

1. MemBrain starten
2. Die lessons train, vali, think einfügen + lesson 4 für den output
3. Das Netz erstellen
4. Das Netz trainieren
5. Den min Net Error festlegen
6. min Net Error bei dem Teacher Manager eintargen (trag ich hier die sec oder den min Net Error ein? Ich kann nur die sec eingeben, wenn ich den min Net Error eingebe kommt "Please enter a number".)
7. Dann Start Thinking wählen ( muss ich den Pfeil von "Currently Edited Lesson" auf 3 stellen?)
8. Thinking stoppen
9. Daten von lesson 4 exportieren

und das alles im selben Netz, oder? Ist das so der richtige Vorgang?

Gruß jojo
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Prozessoptimieren

Post by Admin »

jojo wrote:Also ja, ich meinte schon die Skripte. Es ist ein bisschen blöd wenn ich die nicht selber erstellen kann. Ich soll am Ende meiner Praktikumszeit zeigen wie ich vorgegangen bin. Daher sollte ich einen Weg finden ohne die Skripte auszukommen, obwohl ich sehr gern damit arbeite.
Also das Erstellen der Skripte ist ja prinzipiell kein Problem, nicht dass da ein falscher Eindruck ensteht: Das sind reine Textdateien, die mit der Endung *.as abgespeichert werden.
Mit 'zeigen, wie Du vorgegangen bist' hat das ja zunächst einmal nichts zu tun. Es geht ja wahrscheinlich weniger darum, zu zeigen, welche Mausklicks Du ausgeführt hast, sondern vielmehr, in welchen logischen Schritten Du vorgegangen bist.
Aber selbst wenn es um die Einzelschritte geht: Wenn Du die entsprechenden Anweisungen in ein Skript schreibst, anstatt sie jedesmal von Hand durchzuführen, dann hat das gleich mehrere Vorteile:
- Du kannst Dich nicht 'verklicken'. Das reduziert die Fehleranfälligkeit Deines Vorgehens ganz erheblich
- Du sparst Zeit und Nerven
- Du kannst in die Skripte beliebig Kommentare einfügen, um Dein Vorgehen zu dokumentieren
- Du kannst den Leuten, die Deine Arbeit später übernehmen das Leben stark vereinfachen, in dem Du schöne Skripte vorbereitest.
jojo wrote:Was bedeutet das, man kann auch alles händisch machen?

Heißt das:

1. MemBrain starten
2. Die lessons train, vali, think einfügen + lesson 4 für den output
3. Das Netz erstellen
4. Das Netz trainieren
5. Den min Net Error festlegen
6. min Net Error bei dem Teacher Manager eintargen (trag ich hier die sec oder den min Net Error ein? Ich kann nur die sec eingeben, wenn ich den min Net Error eingebe kommt "Please enter a number".)
7. Dann Start Thinking wählen ( muss ich den Pfeil von "Currently Edited Lesson" auf 3 stellen?)
8. Thinking stoppen
9. Daten von lesson 4 exportieren

und das alles im selben Netz, oder? Ist das so der richtige Vorgang?
Im Prinzip heißt es das, auch wenn ich die Einzelschritte jetzt nicht alle nachvollzogen habe, das kommt immer darauf an, was Du machen willst. Den Teacher musst Du auch nur einmal einstellen, alle Einstellungen werden von MemBrain beim Beenden gespeichert. Auch das Netz wird beim Abspeichern natürlich im trainierten Zustand abgespeichert, d.h., wenn Du das Netz wieder lädtst, dann ist es immer noch genauso trainiert, wie zu dem Zeitpunkt als Du es abgespeichert hast. Du musst das Netz also natürlich nicht jedesmal trainieren, bevor Du es benutzen kannst. Du kannst es außerdem nachtrainieren, wenn Du neue Daten bekommst. Dabei setzt Du natürlich auf dem bereits trainierten Stand auf.
(trag ich hier die sec oder den min Net Error ein?
Du kannst bei den Teachern nur den 'Target Net Error' einstellen, keine Zeit. Du kannst aber die verstreichende Zeit über ein Skript überwachen und dann das Training abbrechen. Da gehört ein klein wenig Skriptprogrammierung dazu, aber nicht viel.

Was ist eigentlich Dein genaues Ziel? Also was möchten Deine 'Auftraggeber' am Ende als Ergebnis haben? Vielleicht können wir auf dieser Basis ein weiteres Vorgehen planen...
Außerdem würde mich wirklich noch interessieren, ob Du weitere Datensätze auftreiben kannst. Das wäre sehr wichtig!

Viele Grüße,
Thomas
Thomas Jetter
jojo
Posts: 12
Joined: Mon 27. Apr 2009, 12:40

Re: Prozessoptimieren

Post by jojo »

Hollo Thomas,

das Problem bisher ist, dass wärend einer Produktion, die Konsistez der Schmelzkäseprodukte stark schwankt. In der Regel wird dafür gesorgt, dass man für eine Produktion, dieselben Rohwaren mit der gleichen Beschwaffenheit verwendet. Man geht also davon aus, dass wärend des Schmelzprozesses weitere Kräfte auf das Produkt wirken, die es in der Struktur verändern.

Ziele des Netzes soll sein, dass man die Parameter so einstellen kann, dass man Schmelzkäse mit einer konstanten/optimalen Konsistenz bekommt.

Die Schmelzmasse kann nach dem Schmelzprozess in dem Creamer gerührt werden. Dadurch wird die Struktur zerkleinert und der Käse wird fester. Die Geschwindigkeit des Rührgerätes kann manuell eingestellt werden, deshalb habe ich diesen Wert als Output genommen.

Bei dem bisher erstellten Netz habe ich mir folgendes gedacht:
Halbstündlich werden analytische Messungen der Schmelzmasse gamcht, die werden dann in das Netz eingegeben und mit den mechnischen und physikalischen Paramtern ergänzt. Für die Konsistenz wird der Wert 5 gewählt und der Output soll dann die Einstellung für das Rührwerk ausgeben.
Admin wrote:Außerdem würde mich wirklich noch interessieren, ob Du weitere Datensätze auftreiben kannst. Das wäre sehr wichtig!
Mir stehen weiter Datensätze zur Verfügung. Ich habe diese gleich in das Netz miteingefügt.

Wenn das Erstellen der Skripte auch für einen nicht Informatiker möglcih ist, könntete ihr mir dann noch eine paar konkrete Angaben machen?

Mein neues Netz füge ich unten mit ein.

mfG

Johanna
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Prozessoptimieren

Post by Admin »

Hallo Jojo,

ich habe Dein Netz nun doch noch mit einer weiteren Hidden-Schicht ausgestattet, da ich das Gefühl habe, dass die Ergebnisse damit besser werden. Außerdem habe ich ein 'Names To Net' über den Lesson-Editor durchgeführt. Das sorgt dafür, dass die Reihenfolge der I/O-Neuronen im Netz zeilenweise von oben nach unten betrachtet die selbe ist, wie die Reihenfolge der Spalten im Lesson-Editor. Das ist zu empfehlen, wenn man später in Skripten über Indizes auf Neuronen bzw. Datenspalten zugreifen möchte.

Weiter habe ich festgestellt, dass Deine Train-Daten in der Spalte 'Vakuum' einige Einträge mit riesigen Zahlen enthalten, die außerhalb jegliches sinnvollen Bereichs liegen. Liegt da ein Fehler vor oder kennst Du bei diesen Datensätzen das 'Vakuum' nicht? In letzterem Fall rate ich Dir von der Verwendung dieser Datensätze ab. Ich habe sie in den angehängten Lesson-Files gelöscht.

Nachdem ich alle Datensätze in die Lesson 'All.mbl' eingefügt hatte, habe ich davon 85% Trainings- und 15% Validierungsdaten über die Funktion im Lesson-Editor in die Lessons 'Train.mbl' und 'Vali.mbl' abgespaltet (also durch Zufallsauswahl, Dateien im Anhang). In MemBrain habe ich die Trainingsdaten in Lesson #1 geladen, die Validierungsdaten in Lesson #2. Lesson #1 habe ich als 'Currently Edited (Training)' Lesson eingestellt, den Net Error habe ich bzgl. Lesson #2 berechnen lassen (Häkchen 'Set Manually' im Lesson Editor muss dazu angewählt sein). Trainiert habe ich dann mit RPROP (Default-Einstellungen).

Die Ergebnisse sehen schon wesentlich besser aus als beim letzten Mal (siehe Screen Shot im Anhang). Du könntest aber locker noch wesentlich mehr Datensätze zum Training verwenden, hast Du noch welche?

Bzgl. Skripte: Warum nimmst Du denn nicht die von Seppy als Ausgangsbasis? Er hat soweit ich weiß z.B. schon ein Skript zum Laden der Lessons geschrieben. Das kann einiges fehlerträchtiges Geklicke im Lesson-Editor ersparen.

Viele Grüße,
Thomas
Attachments
ValidationError.JPG
Pattern Error Viewer bzgl. Validierung
(64.11 KiB) Downloaded 24 times
NetzUndLessons.zip
Paket mit allen Dateien (Netz und Lessons)
(80.47 KiB) Downloaded 696 times
Thomas Jetter
User avatar
Seppy
Posts: 47
Joined: Fri 5. Dec 2008, 04:48
Location: 90537 Feucht

Re: Prozessoptimieren

Post by Seppy »

Hallo jojo,
Du kannst natürlich die beiden Scripte von mir nach Deinen Wünschen ändern, z.B. in "Load_Lessons.as" kannst Du in den ersten drei Zeilen die Dateinamen DEINER Dateien eintragen, die 4. Lesson ist dann für das Ergebnis.

Load_Lessons.as:
------------------------------------------
const string Lern_Lesson = "Lern.csv";
const string Vali_Lesson = "Vali.csv";
const string Think_Lesson = "Think.csv";

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

Öffne einfach mal "Traintime.as" im Windows Editor und schau's Dir mal in Ruhe an, ist ein SEHR kleines Script...
Thomas hat auch sehr gute Beispiel-Scripts auf der Homepage "Downloads > Skript-Beispiele", daraus hab ich auch viel gelernt (Auch NICHT Informatiker, O.K ich bin etwas vorbelastet, aber kein Profi). :shock:

Die Hilfe in MemBrain ist auch super:
Menü: Help > Help Topics > Scripting > Command Reference

Du schaffst das schon...

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