NN für Mustererkennung aus Kombination von mehrerer Signalen

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.
RocknRoll
Posts: 2
Joined: Wed 28. Apr 2010, 12:36

NN für Mustererkennung aus Kombination von mehrerer Signalen

Post by RocknRoll »

Hallo,

ich bin neu hier im Forum und gleichzeitig auch Neuling auf dem Gebiet Neuronale Netze : ) und bräuchte daher etwas Unterstützung um abschätzen zu können ob ich ein NN für meine Zwecke verwenden kann...

Kurz zur Zielvorstellung:

Grundsätzlich geht es um"intelligentes Feedback" zur Bewegungsausführung für gerätegestütztes Krafttraining (Bsp. Beinpresse, Latissimuszug, ...)

An solchen Krafttrainingsgeräten werden jeweils eine Wegezelle (zur Bestimmung der aufgebrachten Kraft über die Zeit) und ein Wegaufnehmer montiert, die Sensoren sollten nach Datenaufbereitung beispielsweise folgende Werte über die Zeit liefern:

Smaplingrate: kann ich noch nicht genau sagen(aber die lässt sich dann je nach Bedarf anpassen)

1. s(t)
2. v(t)
3. a(t)
4. P(t) Leistung
5. und beispielsweise ein Wert für den Range of Motion am Gerät (da muss ich mir noch Gedanken darüber machen
6. etc.

Das Ziel ist jetzt zum einen "klassische" Fehler in der Bewegung manuell zu definieren und entsprechende Datensätze aufzuzeichnen (die Bewegung wird dann durch den verlauzf der 5 Signaleverläufe charakterisiert). Das können dann beispielsweise 5 verschiedene Fehlertypen sein (Typ A, Typ B, etc...)

Jetzt ist die Idee aufgekommen ein NN dazu zu verwenden um eben genau diese Fehlertypen während des Trainings zu erkennen.
Nach meiner Vorstellung nach würde ich das Netz auf die z.B. 5 Fehlerarten antrainieren um dann während des Trainings nach z.B. einem Satz Fehler automatisch zu erkennen.

Meine Fragen:

1) Wäre dies grundsätzlich in einem NN zu bewältigen?

2) Wenn ich in dem Lessoneditor nachsehe kann ich zwar z.b. ein Signal über eine *.csv Datei reinladen, allerdings verlangt der Editor zu jeder Zeile in meiner *.csv Datei (also für jeden Messzeitpunkt) den Wert für die Ausgabe? Aber eigentlich will ich, dass mir das Netz für ein "Muster" (bestehend aus dem Verlauf aller 5 Signale) als Ausgabe Typ A, B oder C gibt und nicht pro Zeile: Das passt mit meiner Logik noch nicht so ganz zusammen....

3) Als Eingabeschicht habe ich 5 Neuronen (für eben 5 Signalverläufe) erstellt. Für die Ausgabeschicht 3 Neuronen für z.B.: 3 Typen (z.B.: A =0, B = 0, C = 1). Wäre das die richtige herangehensweise für die Erstellung eines NN. Weiters habe ich 2 HIDDEN Schichten definiert mit 15 und 9 Neuronen.

4) Kann ich das Netz zum Beispiel mit Datensätzen von 50 Leuten trainieren: sprich 5 Signalverläufe x 50 Personen um das Netz zu verbessern? Falls ja wie wird das gemacht?



Ich wäre über Hilfe und (Denk)Anregungen wirklich sehr dankbar : )
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: NN für Mustererkennung aus Kombination von mehrerer Signalen

Post by Admin »

Hallo und herzlich willkommen im Forum!

Zunächst einmal vorneweg: Du hast Dir ein sehr schwieriges Problem 'ausgesucht' und zwar weil Du im Prinzip Aussagen über längere zeitliche Verläufe machen willst.
Hierbei gibt es grundsätzlich zwei verschiedene Ansätze:
1.) Man gewinnt durch vorgeschaltete Datenanalyse-Verfahren zunächst einmal aus den Zeitreihen abgeleitete Parameter (z.B. Ableitungen, Frequenzspektren etc.) und führt diese dann einem zeitinvarianten NN als einzelne Muster (Pattern) zu, zu denen sich jeweils die zugehörigen Ausgaben ergeben.
Mit anderen Worten: Jede Zeitreihe wird durch Voranalyse auf einen Satz sie beschreibender statischer Parameter reduziert, denen sich dann ein Soll-Ausgabewert zuordnen lässt.
Dieser Ansatz ist i.d.R. der vielversprechendere, da das NN einfach gehalten werden kann: Es handelt sich dann um ein zeitinvariantes Feed-Forward Netz. Für diese Klasse von Netzen ergeben sich die stabilsten Trainingsverläufe und sie sind am besten untersucht. Außerdem ergeben sich damit die besten Trainingszeiten.

2.) Man verwendet ein zeitvariantes Netz (d.h., ein Netz, das zeitabbildende Elemente enthält, wie z.B. Decay-Neuronen, Delay-Links oder Rückkopplungen. An die Eingänge des Netzes legt man nacheinander die Input-Vektoren (Werte der Eingänge zu den jeweiligen Zeitpunkten) an. Beim Letzten Muster gibt man dann die Sollwerte für die Ausgänge mit an und macht nur auf diesem letzten Muster das Training.
Aus mehreren Gründen ist das der wesentlich steinigere und risikoreichere Weg, deshalb möchte ich zunächst nicht weiter darauf eingehen.

Zunächst wäre die Frage, ob Du Dir ein Vorgehen nach 1) bei Deinen Daten vorstellen kannst? MemBrain bietet hier auch gewisse Unterstützung z.B. durch die Möglichkeit FFTs aus Datensätzen zu berechnen, also ein Frequenzspektrum eines Eingangsdatensatzes zu gewinnen. Eine FFT ist ein sehr mächtiges Werkzeug, um ein komplexes Zeitsignal in ein Frequenzspektrum umzurechnen (für den Fall ,dass Dir der Begriff FFT nichts sagt). Damit erhält man dann eine statische, d.h. zeitunabhängige Repräsentation des Signals, mit deren man das Netz wie unter 1.) beschrieben trainieren kann.
In Verbindung mit der Skriptsprache von MemBrain ergeben sich hier sehr leistungsfähige Ansätze. Das Beispiel der 'Stimmerkennung', das in den Skriptbeispielen der Homepagedownloads enthalten ist, verwendet diese Herangehensweise. Dazu gleich eine weitere Frage: Kannst Du ein wenig programmieren oder wäre das für Dich völliges Neuland?

Gerade geht mir leider die Zeit aus, aber vielleicht können wir basierend auf dieser Grundsatzfrage erst einmal in eine Diskussion einsteigen?

Viele Grüße
Thomas Jetter
RocknRoll
Posts: 2
Joined: Wed 28. Apr 2010, 12:36

Re: NN für Mustererkennung aus Kombination von mehrerer Signalen

Post by RocknRoll »

Guten Morgen,

gleich mal vorweg: vielen Dank für die schnelle Antwort - finde das echt toll, dass hier im Forum eine so gute Unterstützung deinerseits gibt :D !

Nachdem ich gestern dann noch einen anderen Artikel zur Mustererkennung von pathologischen Gangmustern gelesen hatte (die haben auch NN verwendet) ist mir das dann auch plötzlich klar gewesen, dass ich das Netz anscheinend nur mit einzelnen Parametern aus meinem Signalen trainieren kann. Wenn ich aus meinen Signalen einzelne Parameter berechne, verliere ich dann nicht aber sehr viel Information?

Grundsätzlich könnte ich mir ein solches Vorgehen aber schon vorstellen - mir stellt sich dann wirklich nur die Frage ob die berechneten Parameter die verschiedenen Bewegungen zur genüge representieren können.

Die FFT ist mir bekannt - und ich habe gestern dann auch schon kurz in diese Richtung gedacht. Meine Programmierkenntnisse sind leider sehr mager, ich habe etwas Erfahrung im programmieren mit LabView, aber halt nur eher kleinere Anwendungen : ) - wenn nötig muss ich mich in die Richtung halt noch einarbeiten.

Freu mich schon auf weiteren Input,


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

Re: NN für Mustererkennung aus Kombination von mehrerer Signalen

Post by Admin »

RocknRoll wrote:Wenn ich aus meinen Signalen einzelne Parameter berechne, verliere ich dann nicht aber sehr viel Information?
Du verlierst auf jeden Fall Information, aber das musst Du auch, um aus einem Zeitverlauf sinnvolle Trainingsdaten zu erhalten. Bevor Du ein Netz zum Training entwickeltst, solltest Du Deine Daten so weit wie möglich reduzieren. Natürlich ist es eine schwer zu beantwortende Frage, welche Information noch ausreicht und welche nicht.
Eine FFT ist zunächst einmal kein Informationsverlust, sondern lediglich eine Transformation vom Zeit- in den Frequenzbereich.
Allerdings macht es auch wenig Sinn, mit zu vielen Frequenzkomponenten in das Netz zu gehen, die Anzahl Input-Neuronen wird dann schnell so hoch, das das Ganze in vernünftiger Zeit und mit einem vernünftigen Satz Trainingsdaten nicht mehr zu handeln ist. Eine Reduzierung der FFT auf einen möglichst geringen Frequenzbereich und eine Mittelung über mehrere Frequenzen macht also bestimmt Sinn, so dass am Ende nur einige wenige Mittenfrequenzen als Parameter übrig bleiben.

Ein zweiter Aspekt ist sicherlich die Frage, wie Du das Netz später im Produktivbetrieb einsetzen willst: Auf welcher Plattform muss es denn laufen? Ist das für Dein Projekt bereits ein Thema, oder geht es nunächst nur um eine wissenschaltliche Machbarkeitsstudie?
Du musst in diesem Zusammenhang daran denken, dass Du die selbe Datenaufbereitung, die Du beim Training durchführst, nachher auch in Echtzeit auf Deinem Produktivsystem benötigst! Denn das Netz muss im Produktivbetrieb natürlich diese selbe Art und Qualität von Daten erhalten, die es auch im Training gesehen hat.

Viele Grüße
Thomas Jetter
ico
Posts: 1
Joined: Fri 10. Jun 2011, 12:03

Re: NN für Mustererkennung aus Kombination von mehrerer Sign

Post by ico »

Hallo,

da ich mich im Prinzip gerade mit dem gleichen Thema (Charakterisierung der Bewegungsausführung an Fitnessgeräten mittels Zeitreihenanalysen basierend auf Neuronale Netze) beschäftige, wollte ich hiermit mal nachfragen, welche Erfahrungen mit der Problematik gemacht worden sind bzw. welche Lösungsansätze sich als gut bewährt haben.

Danke un lG!
Ekitacion
Posts: 3
Joined: Thu 4. Aug 2011, 16:57

Re: NN für Mustererkennung aus Kombination von mehrerer Sign

Post by Ekitacion »

Hallo Zusammen,

ich habe bitte eine Frage zu XOR-Beispiel.
Die Voreinstellung die in der Hilfe beschrieben ist kann bei mir nicht eingestellt werden!!?
Anbei findet ihr Bilder dazu, wo es nicht geklappt hat.
Eine andere Frage hätte ich bitte auch noch, wenn ihr Zeit habt: bestimmt hat der eine oder der andere als Anfänger bei Membrain angefangen.
Ich habe nämlich überhaupt keine Grundkenntnisse, ich wollte das Beispiel von XOR üben, leider hats gar nicht geklappt, da ich nur die falschen Werte rausbekomme.
Ich habe viele theoretische Sachen gelesen, allerdings hat das mir gar nicht weiter geholfen bei MemBrain.
Ich muss mir einfach Funktionen ausdenken, die aus 6 Eingabewerten 6 Ausgabewerte zwischen 0 und 1 erzeugen, womit ich mein Netz trainieren und anschließend prüfen kann, ob andere Werte auch richtig sind.
Die Frage, wie kann ich das realisieren.
Muss man programieren können...?!!
Oder muss ich nur die (mit dem Taschenrechner) gerechneten werte in Excel eintragen und in Membrain hochladen?
Wie muss das Netz aussehen für die 6 Eingabe- und 6 Ausgabewerte?
.... seit einer Woche beschäftige ich mich mit MemBrain, und habe leider kein Konkretes Beispiel wo alles von anfang an erkärt wird wie ich vorgehen kann, außer XOR, der mein Fall nicht zutrifft bzw. der bei mir nicht geklappt hat.
Sorry für die viele Frage, aber ich wäre euch wirklich sehr dankbar, wenn ihr mir ein Beispiel nennen könnt, wo es vom Anfangs an erklärt wird, wie ich vorgehen soll ( Beispielsweise: gerechnete bzw. experimentierte Werte in Excel eintragen oder auch nicht... Dann in MemBrain inportieren durch den Botton ... und wo ich dann die neue Werte von MemBrain finde, damit ich die vergleichen kann...)
Ich habe im Forum gesuch aber habe leider nicht was mir wirklich weiter helfen kann gefunden.
Ich weiss, dass meine Fragen eine Menge Arbeit ist. Aber ich komme gar nicht weiter ohne eure Hilfe
Vielen Dank im Voraus für die Hilfe.
Anbei: Screenshots (XOR)
Kurvenvergleich.png
Kurvenproblem
(359.64 KiB) Not downloaded yet
Lessen-hochlandenerror.png
Fehlermeldung
(146.2 KiB) Not downloaded yet
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: NN für Mustererkennung aus Kombination von mehrerer Sign

Post by Admin »

Hallo,

den Screenshot 'Kurvenvergleich' kann ich mit der neuesten MemBrain Version nachvollziehen, hier läuft mit der Grafik leider etwas schief.

Ich werde das so bald wie möglich korrigieren und ein Update herausbringen.

allerdings hat dies nichts damit zu tun wie MemBrain intern rechnet, die Ergebnisse des XOR-Beispiels solltest Du also ohne Probleme nachvollziehen können.
Woran hängt es denn hier genau?

Um Deine Aufgabe zu lösen musst Du nicht programmieren können nein. Wenn Du die Sache allerdings öfters durchführen willst, dann lohnt sich schon ein kleines Script, das die notwendigen Schritte automatisiert.

Für den Fehler 'Lesson_hochladenerror' bräuchte ich genauere Angaben. Wie kam dieser zu Stande, kannst Du das geladene Lesson-File hier hochladen?



Viele Grüße
Thomas Jetter
Ekitacion
Posts: 3
Joined: Thu 4. Aug 2011, 16:57

Re: NN für Mustererkennung aus Kombination von mehrerer Sign

Post by Ekitacion »

Hallo,

erstens vielen Dank für die Antwort.
Ich habe mich noch intensiver mit MemBrain beschäftigt.
Es hat angefangen Spaß zu machen ;)
So ich habe jetzt aber eine andere Frage, die Konkreter ist.
Ich habe ca. 3000 Datensätze womit ich mein Netz trainiert habe: 6 Eingabe und 6 Ausgabe die von einander unabhängig sind.
Ich habe das Netz trainiert, bekomme aber keine erfreuliche Ergebnisse. Im "Pattern Error Viewer" ist der Große Fehler (unterschied zwischen Soll- und Ist-Kurve) deutlich zu erkennen.de
Was ist der Unterschied zwischen ein Netzt mit Hidden Schichten und ein ohne? (wäre ganz gut wenn du es auch bisschen Mathematisch erklären könntest)
Ich habe auch mit 2-Hidden Schichten versucht, bekomme aber was noch schlechteres als beim dem ohne Hidden-Schichten! :!:
Hast du vieleicht eine Idee wie ich das anders machen kann, damit die beiden Kurven (Soll- und Ist-Kurve) auf einander liegen?? :?:



PS. Ich wollte die Daten im Forum nicht hochladen, da ich mir den Ok vom Datenbesitzer noch nicht geholt habe.
Die beiden Netze sowie die Datensätze habe ich Dir per E-Mail geschickt.
Viele Dank im Voraus für deine Hilfe



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

Re: NN für Mustererkennung aus Kombination von mehrerer Sign

Post by Admin »

Hallo,

ganz im Gegenteil finde ich, dass die Netze - vor allem das mit Hidden-Schicht - ausgezeichnete Ergebnisse liefern.

Ich habe einmal ein paar Testläufe gemacht und Dir Screenshots dazu gelegt. Vielleicht sollten wir erst einmal abklären, ob Du vergleichbare Ergebnisse erhältst, und dann erst im zweiten Schritt, warum Du sie unbefriedigend findest.

Ich habe in einem weiteren Lauf Dein Netz noch etwas verbessert: Deine Daten für die Ausgangsneuronen gehen von 0 bis 1. Die Ausgangsneuronen haben eine LOGISTIC Übertragungsfunktion (was auch gut so ist). Diese Ü-Funktion erreicht die 0 und die 1 aber nur asymptotisch. Man kann es dem Netz nun leichter machen, auch die Extremwerte der Daten zu erreichen, in dem man die Normalisierungseinstellungen der Ausgangsneuronen anpasst:
Ausgangs-Neuronen auswählen (am besten alle gemeinsam) und in den Properties den Button 'Normalization' wählen. Dort kann man nun anstatt dem internen Aktivierungsbereich der LOGISTIC Funktion einen benutzerdefinierten Bereich angeben. Ich habe hier einmal -0.2 bis +1.2 gewählt. Damit bilden sich die Extremwerte 0 und 1 Deiner Daten nicht mehr auf die internen Extrema der LOGISTIC Funktion ab, sondern auf kleinere Werte. Damit können die Ausgangsneuronen Deinen Datenbereich besser aussteuern.

Damit werden die Ergebnisse auch nochmal besser, Screenshots habe ich auch dafür angefügt.

Was aber das Beste ist:
Dein Netz lernt nicht nur 'auswendig', sondern erfasst echte Regeln hinter den Daten: Ich habe von der Gesamtlesson einmal 25 % der Datensätze abgespalten (in MemBrain per Zufallsauswahl, das geht mit dem Lesson Editor).
Diese habe ich zur Validierung herangezogen.
Ich habe also mit 75 % der Daten trainiert (Lesson 'Train') und mit 25 % validiert (Lesson 'Validate'). Dazu lädt man im Lesson Editor die Train-Lesson in Lesson #1 und die Validate-Lesson in Lesson #2, aktiviert die Lesson #1 als Training Lesson, randomisiert das Netz und startet das Training.

Einen Screenshot davon findet Du in der Datei 'WithHiddenAndExtendedNormalization_Validation.jpg'.
Hier wird nun die Reaktion des Netzes auf die Validierungsdaten angezeigt. Mit diesen wird aber NICHT trainiert.

Wie man sieht, zeigt das Netz auf die Validierungsdaten ausgezeichnete Werte. Dies gilt für alle Ausgabeneuronen (das anzuzeigende Ausgabeneuron kann man im Pattern Error Viewer auswählen, der Screenshot zeigt nur das Neuron '17').

Zu Deiner Frage bzgl. der Hidden-Schicht:
Die Theorie besagt, dass man mit einem Netz ohne Hidden-Schicht nicht jede Übertragungsfunktion abbilden kann. Ab einer Hidden-Schicht kann man aber theoretisch jede Funktion abbilden.

Viele Grüße einstweilen.

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

Re: NN für Mustererkennung aus Kombination von mehrerer Sign

Post by Admin »

Der Bug aus dem Screenshot 'Kurvenvergleich' ist nun behoben, die Graphen für die Aktivierungsfunktionen werden wieder korrekt angezeigt.

Die neue MemBrain Version (03.08.01.00) kann auf der MemBrain Homepage http://www.membrain-nn.de heruntergeladen werden.

Viele Grüße
Thomas Jetter
Post Reply