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

Prozessoptimieren

Post by jojo »

Hallo zusammen,

ich schreibe zur Zeit meine Bachelor-Thesis im Bereich Lebensmitteltechnologie, mein Thema ist Prozessoptimierung bei der Schmelzkäseherstellung und dafür soll ich MemBrain verwenden. Mir stehen jede Menge Daten zur Verfügung chmische Auswertungen der Rohware (Käse), analytische Messungen die wärend des Prozesses gemacht werden (Fett, Fett in der Trockenmasse, Trockenmasse, Eiweiß, Laktose,...), Prozessparameter (Tempreatur, Druck, Rührzeit,...) und sensorische Werte des Endprodukts.
Ich habe in meinem Studium noch nie mit NN gearbeitet und weiß nicht genau wie ich vorgehen soll, vielleicht kann mir jemand von euch helfen. Ich dachte mir, dass ich als INPUT die Werte der Rohware verwende und mein OUTPUT sind die sensorischen Werte des Fertigprodukts und für die anderen hätte ich HIDDEN units verwendet. Mir ist aber noch nicht klar wie ich meine Werte vorbereiten muss bzw. welches Lernprogramm ich verwenden soll....

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

Mit freundlichen Grüßen

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

Re: Prozessoptimieren

Post by Admin »

Hallo jojo,

hört sich nach einem interessanten Projekt an und wenn Du sagst, dass Du 'jede Menge' Daten hast, dann ist das schon mal eine gute Voraussetzung, ohne jede Menge Daten geht es nicht!

Zuallererst solltest Du Dir über Deine Zielsetzung klar werden, das scheint mir noch nicht ganz der Fall zu sein. Dabei solltest Du folgendermassen vorgehen:

1.) Sammle alle Parameter, die die Qualität des Schmelzkäses beeinflussen könnten und die bei der Herstellung erfasst werden.

2.) Bestimme die Prozessparameter, die Du optimieren willst.
Also: An welcher Stellschraube möchtest Du drehen, um den Prozess zu optimieren. Wenn es mehrere sein sollen, dann beschränke Dich zunächst auf so wenige wie möglich. Such' Dir die vielversprechendsten Kandidaten aus.
--> Diese Parameter werden Deine OUTPUTS

3.) Alle anderen Prozessparameter werden INPUTS

4.) Alle Parameter, die die Qualität des Käses beschreiben (also Messwerte, die am Endprodukt vorgenommen werden), werden auch INPUTS.

5.) Stelle Deine Daten so zusammen, dass immer ein zusammengehöriger Datensatz in einer Zeile einer Datei steht. Dabei müssen zuerst alle Input-Spalten stehen, gefolgt von allen Output-Spalten.
Wenn Du soweit bist, schlage ich vor, einmal einen Beispieldatensatz hier zu posten, dann machen wir von da ausgehend weiter.

Wenn Dir die oben beschriebene Herangehensweise bzgl. INPUTS und OUTPUTS merkwürdig vorkommt, dann versuche einmal so zu denken: Was möchtest Du dem Netz später als bekannte Eingaben präsentieren? Was soll es daraufhin ausspucken? Genau nach dieser Denkweise musst Du die I/Os anlegen: Rein kommt die gewünschte Käsequalität und alle vorgegebenen Prozessparameter. Raus kommen Vorschläge für die restlichen Prozessparameter, die Du ja optimieren willst.
Trainiert wird das Netz mit bekannten Datensätzen, die jeder für sich eine die Wirklichkeit abbildende Kombination aus allen Prozessparametern und der damit erzielten Käsequalität darstellen. Welche Datenspalten davon input und welche output Deines physikalischen Prozesses der Käseherstellung waren, ist etwas anderes als Deine gewünschte Aufteilung INPUT/OUTPUT des Netzes.

Hoffe, dass hilft bei den ersten Schritten?

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

Re: Prozessoptimieren

Post by jojo »

Hallo,

erstmal möchte ich mich für die schnelle Antwort bedanken, sie hat mir sehr weiter geholfen.

Da mir noch nicht alle Daten zur Verfügung stehen verzögert sich meine Arbeit ein bisschen. Um die Zeit zu überbrücken habe ich nun einen Beispieldatensatz erstellt, den ich im Anhang beigefügt habe. Der Datensatz beinhaltet die Messwerte, die Konsistenz, die sensorisch ermittelt wurde und das Rohmaterial (Komponente A, B). Das Produkt besteht nicht nur aus den Komponenten A und B, sondern aus zusätzlichen Komponenten die aber nur gering in ihren Werten abweichen. Müssen diese Koponenten auch mit in den Datensatz aufgenommen werden?

In den nächsten Wochen wird er nun noch mit den physikalischen Prozessparametern ergänzt.

Die Vergabe der I/O`s ist mir noch nicht ganz klar.
Meine Aufgabe ist es herauszufinden welche Parameter gegeben sein müssen, damit man eine konstante und optimale Konsistenz von 5 erhält. Also möchte ich doch eigentlich die Konsistenz optimieren??? Muss die Konsistenz dann mein Output oder Input sein???

Mit freundlichen Grüßen
jojo
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Prozessoptimieren

Post by Admin »

Hallo Jojo,
Admin wrote:Meine Aufgabe ist es herauszufinden welche Parameter gegeben sein müssen, damit man eine konstante und optimale Konsistenz von 5 erhält. Also möchte ich doch eigentlich die Konsistenz optimieren??? Muss die Konsistenz dann mein Output oder Input sein???
Schau Dir Deinen Satz bitte einmal ganz genau an: Du sagst, was Du herausfinden willst (Parameterwerte). Also müssen die Deine OUTPUTS sein, das Netz soll sie Dir schließlich verraten. Du weißt ja schon, welche Konsistenz Du willst (nämlich 5), da macht es wenig Sinn, ein Netz zu konstruieren, das Dir eben diese Konsistenz ausgibt, oder? ;)
Natürlich kannst Du auch ein Netz aufbauen, was als Ausgang die Konsistenz hat und alle Parameter an den Eingängen. Was wird dieses Netz tun (sofern es hoffentlich korrekt funktioniert)? Es wird Dir die Konsistenz Deines Schnelzkäses vorhersagen, wenn Du dem Netz an den Eingängen sagst, wie Du den Käse behandeln willst und welche Parameter Dein Ausgangsmaterial hat. Das ist aber nicht das, was Du willst. Vielmehr willst Du dem Netz sagen: "Ich möchte Käse mit einer bestimmten Konsistenz und habe die und die Parameter meines Ausgangsmaterials. Wie muss ich die restlichen Parameter oder Komponenten X, Y und Z wählen, damit der Käse so wird?"

Oder mathematisch:
K = Konsistenz des Käses
Px = Eingangsparameter 'x'. Das können Messwerte des Ausgangsmaterials sein oder Behandlungstemperaturen, Erhitzungszeiten usw.

Also ist
K = f(P1, P2, P3, P4, ..., PN)

Angenommen, Du möchtest nun Parameter P2 und P3 optimieren, die anderen wählst Du selbst oder sie sind Messwerte Deines Ausgangsmaterials, an denen Du sowieso nichts ändern kannst. Dann interessieren Dich die Funktionen

P2 = f(K, P1, P4, ..., PN)
sowie
P3 = f(K, P1, P4, ..., PN)

Also folgt: K, P1, P4, ..., PN sind EINGÄNGE.
P2 und P3 sind AUSGÄNGE.

Ich weiß, das kommt einem am Anfang etwas merkwürdig vor, aber genau so ist es: Du zeigst dem Netz während des Trainings ganz viele Beispiele, welche Parameterwerte P2 und P3 zu Eingangsdatensätzen passen, die aus K, P1, P4, ..., PN bestehen. Genau diesen Zusammenhang erlernt es, nämlich: "Welche Werte für P2 und P3 passen zu den Eingangsdaten K, P1, P4, ..., PN".
Wenn Du nun einen Käse mit der vorgegebenen Konsistenz K und den vorgegebenen Parametern P1, P4, ..., PN hestellen willst, dann sagt Dir das trainierte Netz an seinen Ausgängen wie Du P2 und P3 zu wählen hast, damit das auch was wird (immer angenommen, Dein Netz bekommt während des Trainings jede Menge gute Datensätze, hinter denen verdeckte physikalische Zusammenhänge stecken).

So, ich glaube noch präziser bekomme ich es nicht formuliert, ist die Sache jetzt klarer geworden?

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

Re: Prozessoptimieren

Post by jojo »

Hallo Thomas,

vielen Dank für die ausführliche Antwort, ich glaube das mit den I/O habe ich jetzt verstanden. Leider habe ich immer noch nicht alle Daten zusammen, darum habe ich einfach mit denen die mir bereits zur Verfügung stehen einen Versuch mit MemBrain gestartet.
Ich habe einen Datensatz erstellt und diesen in MemBrain importiert, musste anschließend aber fest stellen, dass es nicht funktioniert :( . Sobald ich auf "Start Teach (Auto)" klicke, erscheint eine Fehlermeldung "Lesson is not in correct format for net!". Leider kann mir hier im Betrieb niemand weiter helfen und selbst kann ich den Fehler nicht ausfindig machen. Ich hab mein Datensatz und die MemBrain-Datei im Anhang angehängt.
Würde mich freuen, wenn du kurz drüber sehen könntes :roll: .

Vielen Dank im Voraus

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

Re: Prozessoptimieren

Post by Admin »

Hallo,

kann die Dateien im Moment nicht anschauen, da mir gerade die Infrastruktur dazu fehlt. Es hört sich aber danach an, als ob die Namen der I/O Neuronen in Deinem Netz nicht mit denen in der Lesson (also den Daten) übereinstimmen.

Das kannst Du beheben, in dem Du im Lesson-Editor 'Names To Net' ausführst. Das überträgt alle Namen aus der Lesson zu den Neuronen im Netz.
Du musst allerdings vorher sicherstellen, dass die Anzahl I/Os im Netz und in der Lesson übereinstimmen.

Viele Grüße,
Thomas
Thomas Jetter
User avatar
Seppy
Posts: 47
Joined: Fri 5. Dec 2008, 04:48
Location: 90537 Feucht

Re: Prozessoptimieren

Post by Seppy »

Hallo jojo,

wie Thomas schon gepostet hat, liegt es daran " in %" bei den Outputs.
Das hast Du vermutlich später noch in Deiner Input-Datei bei den Output-Werten geändert.

Ich hab mal ein bisschen mit deinen Daten gespielt und häng Dir mal was dran...
(Leider mit wenig Erfolg, es scheinen noch Informationen in Deinen Inputs zu fehlen, um die Outputs zu lernen).
Damit meine ich nicht die Menge Deiner Lerndaten/Datensätze, sondern mehr oder andere Inputs/Inputneuronen.

Fang mal damit an:
1. Entpack die "Seppy.zip" in einen neuen Ordner.
2. Starte MemBrain.
3. Führe das Script "Load.as" im Menü mit "Scripting > Execute Script..." aus.
4. Jetzt im Menü "Teach > Pattern Error Viewer".
5. Jetzt im Menü "Teach > Net Error Viewer".
6. Alle Fenster sichtbar platzieren.
7. Führe das Script "Traintime.as" im Menü mit "Scripting > Execute Script..." aus.
(Wird mit "Teach > Stop Teacher (Auto)" beendet).


Erklärung:

Das Netz:
"Netz.mbn" ist natürlich das Netz.


Die Lessons:
"Norm.csv" ist Deine ursprüngliche Input-Datei (Mit ALLEN Werten).

"Train.csv" ist wie "Norm.csv", ALLERDINGS habe ich die letzten 45 Werte (ca. 10%) ausgeschnitten und in die Datei "Vali.csv" verschoben.

"Vali.csv" enthält die letzten 45 Werte der "Train.csv" um das Netz mit NICHT-trainierten Werten überprüfen zu können.

"Think.csv" enthält z.Z. nur Daten aus "Vali.csv".
(Wenn Du später mal ein trainiertes Netz hast, kannst Du die Inputs, von welchen Du ein Ergebnis haben möchtest in diese Datei eintragen, das Script "Thinking.as" ausführen und erhältst die Ergebnisse dann in der Lesson Nr.4 und in der Datei "Output.csv").


Die Scripte:
"Load.as" läd das Netz "Netz.mbn" und die Lessons (Train.csv = 1, Vali.csv = 2, Think.csv = 3, Lesson 4 ist leer, für Output vom Script "Thinking.as").
Ausserdem wird Lesson 1 aktiviert und Lesson 2 für den NetError eingestellt.

"Traintime.as", mit diesem Script kannst Du feststellen nach welcher Zeit Dein Netz ca. mit dem trainieren fertig ist und vor allem welchen minimalen NetError das Netz erreicht.
Den min. NetError kannst Du dann als Abbruchkriterium des Trainings in den Teacher-Einstellungen eintragen.
(Je niedriger der min. NetError, desto besser ist Dein Netz).

"Thinking.as" mit diesem Script kannst Du (Wenn Dein Netz fertig trainiert ist) die Ergebnisse abrufen.
z.B. giebst Du in die Datei "Think.csv" Deine Input-Werte ein.

Wasser Dos;TM;Fett abs;F.i. Tr.;pH;EW;Lactose;Konsistenz
0,8;50,1;28,5;56,9;5,77;9,07;8,24;5

Jetzt rufst Du das Script mit "Scripting > Execute Script..." auf, und erhältst in der Datei "Output.csv" das Ergebnis.

z.B.
Wasser Dos;TM;Fett abs;F.i. Tr.;pH;EW;Lactose;Konsistenz;Gesamtkäseanteil in %;Anteil Magerkäse jung in %
0,8;50,1;28,5;56,9;5,77;9,07;8,24;5;23,4283601453306;84,7959574880963

Das Script macht also genau EINEN Denkschritt pro Inputzeile und schreibt dann die In/Outputs nach Lesson 4, "Output.csv".
(Zuvor bitte das Script "Load.as" ausführen) !!!

Die Dateinamen kannst Du bei "Load.as" und "Thinking.as" ganz oben anpassen, sind ganz normale Textdateien.

Vergiss nicht Dein Netz zu normalisieren:
(Musst Du nur machen wenn sich Deine Daten geändert haben).

1. MemBrain starten.
2. Dein Netz laden.
3. Die Datei mit ALLEN DATEN (Deine UrDatei oder Norm.csv) laden.
4. Alle Inputneuronen mit der Maus auswählen.
5. Im Menü "Extras > Normalization Wizard".
6. Alle Outputneuronen mit der Maus auswählen.
7. Im Menü "Extras > Normalization Wizard".

Das ist notwendig, um für jedes In/Outputneuron die min./max. Werte festzulegen.
Seppy.zip
(13.95 KiB) Downloaded 641 times
Gruß Seppy
Attachments
Seppy.zip
(13.95 KiB) Downloaded 571 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 »

Hallo jojo,

hatte gestern auch mal kurz Zeit, mit Deinen Daten ein wenig zu experimentieren und muss Seppy vollkommen zustimmen:
Deine Daten beinhalten nicht die nötigen Regeln, um von den Inputs auf die Outputs zu schließen.

Das bedeutet, Dir fehlen qualitativ Input-Daten, die in Deinem abzubildenden Prozess die Outputdaten beeinflussen.

Aus Sicht des Netzes sind Deine Daten momentan widersprüchlich oder - anders ausgedrückt - chaotisch: Vereinfacht gesprochen bedeutet das, dass es zu identsichen bzw. äußerst ähnlichen Eingabemustern sehr unterschiedliche Ausgabemuster in Deinen Daten gibt.
Das ist so ungefähr, wie wenn Du einem Schüler heute beibringen willst, dass 2 + 3 = 5 ist, morgen behauptest Du aber 2 + 3 sei 7. Der Schüler hat keine Möglichkeit, etwas zu lernen, da er aus diesen Daten keine Regeln ableiten kann. Erst wenn er merkt, dass Du Montags immer '5' sagst, an allen anderen Wochentagen aber '7' kann er das erlernen. Dazu braucht er weiteren Input. Nämlich den Wochentag.

Ein etwas krudes Beispiel, ich weiß, aber vielleicht hilft's beim Verständnis ja trotzdem?

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

Re: Prozessoptimieren

Post by jojo »

Hallo ihr zwei,

vielen Dank für die Antworten. Seit heute morgen stehen mir auch die physikalischen Prozessparameter zur Verfügung, diese muss ich allerdings erst noch aufbereiten.
Veilleicht sind das die entsprechenden Daten die zu einer Übereinstimmung führen.
Wenn sie es nicht sind, kann es dann sein, dass sich der Prozess nicht mit neuronalen Netzen voraussagen lässt? Oder muss sich der Prozess grundsätzlich mit dem richtigen Datensatz voraussagen lassen, welche Erfarungen habt ihr bis her gemacht...?

an Seppy,

leider kann ich die Skripte nicht öffnen. Kann es sein, dass ich dafür eine zu alte Version von MemBrain habe? Was kann ich dagegen unternehmen?

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

Re: Prozessoptimieren

Post by Admin »

Hallo jojo,

für die Skripte brauchst Du die aktuellste MemBrain Version (03.05.00.00).

Einfach über eine bestehende Installation drüber installieren.

In MemBrain das Skript dann über 'Scripting' - 'Execute Script' ausführen.
jojo wrote:Wenn sie es nicht sind, kann es dann sein, dass sich der Prozess nicht mit neuronalen Netzen voraussagen lässt?
Wenn Deine Daten die nötigen Regeln beinhalten (d.h., wenn die Outputs in irgendeiner geregelten Weise von den Inputs abhängen), dann wird ein NN auch in der Lage sein, diese Regeln zu erlernen. Es sind allerdings viele Datensätze ('Beispiele') notwendig.
Wie gut die Vorhersage wird, hängt davon ab, wie viele Eingangsparameter fehlen, wie die Codierung gewählt wird und wie viele (valide!) Datensätze Du mobilisieren kannst.

Mehr kann man erst nach weiteren Versuchen sagen. Du hast nun aber schon mal die Aussage, dass Deine Outputs nicht alleine von Deinen momentanen Inputs abhängen, das ist doch auch schon mal ein wichtiges Ergebnis. Es fehlen offensichtlich wichtige weitere Parameter, so viel ist sicher.

Grüße,
Thomas
Thomas Jetter
Post Reply