Anfängerfrage INPUT = OUTPUT

Haben Sie Fragen zur Bedienung bestimmter Features von MemBrain? Sind Sie nicht sicher, welches Häkchen was bewirkt? Möchten Sie wissen, ob eine bestimmte Funktionalität in MemBrain vorhanden ist oder nicht?

Dann stellen Sie Ihre Fragen hier!
Post Reply
gianni
Posts: 12
Joined: Thu 20. Nov 2014, 10:56

Anfängerfrage INPUT = OUTPUT

Post by gianni » Thu 20. Nov 2014, 11:28

Hallo liebe Formumgemeinde!

Da ich sowohl hier im Forum als auch beim Thema NN ein absoluter Neuling bin erstmal ein herzliches Hallo in die Runde.

Ich erkunde jetzt seit einer Woche Membrain und bin jetzt soweit das ich ein kleines Testnetz ausprobieren will. Ich beziehe die Test-, Validierungs- und Echtdaten aus einer Datenbank. Bei den Echtdaten möchte ich die berechneten Outputs wieder in die DB einlesen um weitere statistische Auswertungen über die DB laufen zu lassen.

Um die Outputs dem korrekten Datensatz in der DB zuorden zu können habe ich folgende Idee und würde gerne wissen ob (und wenn ja wie) ich das in Membrain realisieren kann.

Ich übergebe den Index (numerisch ganzzahlig) als INPUTneuron dem Netz. Der Inhalt des INPUTneurons soll gleichzeitig der Inhalt des verlinkten OUTPUTneurons sein. Schön wäre es natürlich diese INPUTneuronen und OUTPUTneuronen vom eigentlichen lernen auszuschliessen, da sie ja nur für die konkrete Zuordnung in der DB benötigt werden und für die Berechnung des gewünschten Outputs nicht relevant sind.

Für jede Hilfestellung oder Anregung wäre ich sehr dankbar.

Mit freundlichen Grüssen!
Gianni

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

Re: Anfängerfrage INPUT = OUTPUT

Post by TJetter » Fri 21. Nov 2014, 21:18

Hallo und herzlich Willkommen hier im Forum!

Ich werde leider aus der Beschreibung der Problemstellung noch nicht ganz schlau. Wie soll denn die Datenbank angebunden werden?
Geht es um eine Anbindung über Skripte oder über die MemBrain DLL? Oder über CSV-Files?
gianni wrote:Ich übergebe den Index (numerisch ganzzahlig) als INPUTneuron dem Netz. Der Inhalt des INPUTneurons soll gleichzeitig der Inhalt des verlinkten OUTPUTneurons sein.
Soll der Index als Aktivität einem Input zugewiesen werden? Zu welchem Zweck? Wenn ja, wie kann dieser Index dann der 'Inhalt des verlinkten Outputneurons' sein?

Ist es möglich, die Problemstellung und die Fragen dazu ein bisschen ausführlicher oder anders zu beschreiben?

Viele Grüße und viel Erfolg
Thomas Jetter

gianni
Posts: 12
Joined: Thu 20. Nov 2014, 10:56

Re: Anfängerfrage INPUT = OUTPUT

Post by gianni » Sat 22. Nov 2014, 09:50

Hallo!

Zuerst einmal Danke für die Rückmeldung.

Tut mir leid das die Beschreibung meiner Problemstellung nicht klar genug ist. Am besten ich versuche mal den geplanten Ablauf meines Testprojektes genauer zu beschreiben, hoffentlich wird dann alles klarer.

Ich habe auf einem Unix System eine Datenbank in die ich die Daten für mein Testprojekt eingebe.
Der Datenbankaufbau sieht vereinfacht so aus:

Datensatznummer(eindeutig);IN1;IN2;IN3;IN4;Ergebnis;Prognose

Das NN für mein Testprojekt sieht zurzeit so aus:

Inputschicht: Datensatznummer(=IN0),IN1,IN2,IN3,IN4
Hiddenschicht
Outputschicht: Datensatznummer(=OUT0),Ergebnis(=OUT1)
Dabei sind IN0 und OUT0 (also die Datensatznummer) direkt miteinander verlinkt und haben zu den anderen neuronen keine verlinkung.

Für die Bereitstellung der Daten fürs Lernen, Validieren und Anwendung mit Echtdaten erzeuge ich unterschiedliche RawCSV Files die ich in Membrain einlese.

Fürs Lernen und Validieren sieht der Fileaufbau so aus:
Datensatznummer(=IN0),IN1,IN2,IN3,IN4,Datensatznummer(=OUT0),Ergebnis(=OUT1)
Bei den Echtdaten wird einfach der Output weggelassen.

Jetzt möchte ich das Netz mit den Lerndaten lernen lassen und gleichzeitig den Neterror anhand der Validierungsdaten ermitteln. Wenn der Neterror klein genug ist möchte ich die von Membrain erstellten Prognosen mittels "Record Lesson" wieder in ein RawCSV File Exportieren. Dabei soll das File wie folgt aufgebaut sein:
Datensatznummer(=IN0),IN1,IN2,IN3,IN4,Datensatznummer(=OUT0),Prognose(=OUT1)

Aus diesem File möchte ich die Prognose(=OUT1) wieder zurück in die Datenbank schreiben, dazu benötige ich die Datensatznummer(=OUT0) um den Prognosewert dem richtigen Datensatz in der Datenbank zuordnen zu können.

Das Netz soll lernen das Ergebnis zu prognostizieren. Und darüber hinaus soll es "lernen" das die Datensatznummer(=OUT0) immer den gleichen Wert wie die Datensatznummer(=IN0) aufweist. Also zum Beispiel IN0=123 -> OUT0=123.

Natürlich ist es klar, dass die Datensatznummer absolut keinen Einfluss auf die zu erstellende Prognose hat, darum auch die Frage ob man das vom learning ausschliessen kann oder ob es irgend einen anderen (einfacheren und sinnvolleren) Ansatz gibt die Datensatznummer der erstellten Prognose zuzuorden.

Ich hoffe das mein Problem/Frage nun klarer und verständlicher formuliert ist und würde mich über eine Rückmeldung sehr freuen.

Wünsche noch ein schönes Wochenende.
Mit freundlichen Grüssen!
Gianni

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

Re: Anfängerfrage INPUT = OUTPUT

Post by TJetter » Sun 23. Nov 2014, 20:17

gianni wrote:Natürlich ist es klar, dass die Datensatznummer absolut keinen Einfluss auf die zu erstellende Prognose hat, darum auch die Frage ob man das vom learning ausschliessen kann
Man kann das zwar nicht vom Training ausschließen, aber stören tut es auch nicht: Wenn der Input IN0 zu keinem anderen Neuron (außer OUT0) Verbindung hat, dann stört er das Training von OUT1 nicht.
Das Ganze verhält sich dann quasi wie zwei getrennte Netze, die eben gleichzeitig trainiert werden und einen gemeinsamen 'Net Error' als Anzeige des Trainingsfortschrittes besitzen.
Die Abbildung OUT0 = IN0 sollte das Netz problemlos erlernen können. Alternativ kann man aber auch den Link fest mit dem Wert 1 belegen (In den Eigenschaften des Links) und mit einem 'Lock' versehen. Dann wird er vom Teacher ignoriert. Das selbe sollte man dann mit der 'Activation Threshold' des Neurons OUT0 machen: Diese auf 0 setzen und ebenfalls 'Lock' aktivieren. Bei IN0 und OUT0 muss der Normalisierungsbereich so gesetzt werden, dass alle Datensatznummern Platz finden (also 0 bis N). Als Aktivierungsfunktion für IN0 und OUT1 sollte IDENT_0_1 gewählt werden.

Das Ganze kann man sich aber auch sparen:
Man kann das Neuron OUT0 komplett weg lassen und den Ausgang von IN0 einfach offen lassen. Bei der Aufzeichnung mit 'Record' werden nämlich auch die Werte der Inputs mit aufgezeichnet. Damit also auch die Datensatznummer in IN0. Normalisierung für N0 muss aber trotzdem ausreichend gesetzt werden!

Das Ganze macht man dann übrigens am besten mit einem Skript, wie hier bereitgestellt:
viewtopic.php?f=13&t=232

Viele Grüße und viel Erfolg!
Thomas Jetter

gianni
Posts: 12
Joined: Thu 20. Nov 2014, 10:56

Re: Anfängerfrage INPUT = OUTPUT

Post by gianni » Mon 24. Nov 2014, 11:13

Herzlichen Dank für die rasche Rückmeldung.
Genau das ist die Lösung nach der ich gesucht habe.
Vielen Dank auch für den Hinweis mit dem Skript.

Mit freundlichen Grüssen!
Gianni

Post Reply