KNN zur Kennfelderkennung

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
User avatar
Hanisch
Posts: 15
Joined: Thu 31. Mar 2011, 17:14
Location: Mannheim

KNN zur Kennfelderkennung

Post by Hanisch »

Hallo wieder - ich hab mir ja mal ein "Übungsproblem" gesucht (vielleicht etwas sportlich ein 4-Dimensionales Problem anzugehen - aber ich will ja vorankommen):

Daten:
3 Eingangsgrößen: A: 3 Variationen B: 12 Variationen C: 21 Variationen
1 Ausgangsgröße 756 Datensätze

Nun dachte ich mir, ich gehe mit den Daten wie folgt vor:
Image
Erstmal werden sie in eine Willkürliche Reihenfolge gebracht,
dann in Testdaten und Trainingsdaten aufgespalten.
Die Trainingsdaten werden dann nochmal dreigeteilt um eine kleine Kreuzvalidierung hinzubekommen.

Zum trainieren hab ich mir folgende Strategie ausgedacht:
Image
Also im Moment lass ich das Netz erstmal ne weile trainieren, versuch dabei zu beobachten, wie hoch ungefähr der minimale beobachtete Netzfehler lag, und starte dann ein neues Training mit diesem als Abbruchwert.
Hier die Zwischenfrage: Gibt es denn eine Möglichkeit den minimalen Netzfehler während eines Trainings als Zahl ausgeben zu lassen ?
(auch wenn mir schon aufgefallen ist, dass dieser beim folgenden Training nicht unbedingt erreicht wird, und man ggf mehrmals neu trainieren muss, um an diesen heranzukommen...)

Problem Nr.1 ist bei dem ich ein wenig hänge ist die Auswahl eines geeigneten Netzes.
da hab ich bisher mal eines mit 5 versteckten Neuronenschichten mit jeweils 50 Neuronen ausprobiert,
bei dem ich einmal den Tangens Hyberbolicus und einmal die Fermifunktion eingesetzt hab,
und eines mit 3 Neuronenschichten mit jeweils 250 Neuronen. (alle FeedForward ohen Shortcuts)

Jetzt hab ich die Netze mal über Nacht lernen lassen - da ich das mit dem "auswendig lernen" mal sehen wollte.
Also auch wenn ich den Netzfehler der Trainingsdaten betrachte - dann ist dieser durchaus nicht 0 - also so ganz auswendig gelernt hat keines der Netze die Daten.
Spannenderweise haben die 5-Schichtigen Netze einen recht fixen Wert angenommen, um den sie oszilieren, das 3-Schichtige Netz (OK - das ist auch eher langsam - mit der Neuronenzahl) hüpft noch immer freudig mal auf und mal ab.
(alle mit RPROP trainiert)

Hier mal die Zwischenfrage zum Netzfehler: bezieht sich dieser auf Normierte Werte, oder spielt hier die absolute Größe meiner Ausgangsdaten eine wichtige Rolle ?

Achso - und die große Frage natürllich: Lieg ich mit meinen Netzentwürfen völlig daneben ?
gibt es da irgendwelche Strategien die Neuronananzahl zu erhöhen, zu verringern ?
Ist es sinnvoll verschiedene Neuronenanzahlen für die einzelnen Schichten zu verwenden ?

soviel mal für`s erste von dem Projektchen.
Viele Grüße
Thomas
User avatar
Hanisch
Posts: 15
Joined: Thu 31. Mar 2011, 17:14
Location: Mannheim

Re: KNN zur Kennfelderkennung

Post by Hanisch »

So - erste Ergebnisse kann ich mit dem 3-50-50-50-50-50-1 Netz Logistic schonmal verzeichnen (die anderen lieferten weniger schöne Werte):
Image
(Dargestellt: für eine Version von A eine dreidimensionale Darstellung der ausgangsgröße über B und C. Oben Links die Originalwerte, unten Rechts die Antwort des KNN auf die Eingabewerte der Originalwerte)

ist jetzt nicht sooo schlecht - allerdings würd ich gern mehr rausholen...
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: KNN zur Kennfelderkennung

Post by Admin »

Hanisch wrote:Problem Nr.1 ist bei dem ich ein wenig hänge ist die Auswahl eines geeigneten Netzes.
da hab ich bisher mal eines mit 5 versteckten Neuronenschichten mit jeweils 50 Neuronen ausprobiert,
Das kommt mir zunächst einmal hoffnungslos überdimensioniert vor:
Ich würde mit maximal 2 verdeckten Schichten arbeiten, zunächst vielleicht nur eine. Beginnen würde ich mit einer verdeckten Schicht mit zwei Neuronen.
Dann langsam aufstocken. Typischerweise erweitert man das Netz langsam und vorsichtig, bis der Validierungsfehler nicht mehr abnimmt oder sogar wieder zunimmt.
Das kleinstmögliche/-nötige Netz bietet neben der besten Generalisierung auch den Vorteil der minimalen Berechnungszeiten.
Hanisch wrote:Hier mal die Zwischenfrage zum Netzfehler: bezieht sich dieser auf Normierte Werte, oder spielt hier die absolute Größe meiner Ausgangsdaten eine wichtige Rolle ?
Der Netzfehler bezieht sich auf normalisierte Werte, die absolute Größe der Ausgangsdaten spielt keine Rolle, so lange der eingestellte Normalisierungsbereich des Ausgangsneurons entsprechend äquivalent
Hanisch wrote:Achso - und die große Frage natürllich: Lieg ich mit meinen Netzentwürfen völlig daneben ?
gibt es da irgendwelche Strategien die Neuronananzahl zu erhöhen, zu verringern ?
Ist es sinnvoll verschiedene Neuronenanzahlen für die einzelnen Schichten zu verwenden ?
abgedeckt ist.
Siehe oben bzgl. einer grundsätzlichen Strategie.

Ja, eine unterschiedliche Neuronenzahl der Schichten macht oft Sinn. In der Regel sollte diese nach unten (also zum Ausgang hin) abnehmen, da hier die Daten bereits dimensionsreduziert sind.

Viele Grüße
Thomas Jetter
User avatar
Hanisch
Posts: 15
Joined: Thu 31. Mar 2011, 17:14
Location: Mannheim

Re: KNN zur Kennfelderkennung

Post by Hanisch »

Also - ich probier gerade mal rum, und beschreib mal meine Beobachtungen:

3-10-1-MLP Netzfehler 0,145 erreicht (Wiederholungen noch nicht erfasst)
3-50-1-MLP Netzfehler 0,286 erreicht (Wiederholungen noch nicht erfasst)
3-10-5-1-MLP Netzfehler 0,039 erreicht (ca. 136.000 Wiederholungen)
3-50-40-30-20-10-5-1 MLP Netzfehler 0,0031 erreicht (ca. 37.500 Wiederholungen) --> wird weitergeführt

Trainingsdaten 320
Validierungsdaten 160
(Testdaten 276)

Netzfehler immer für Validierungsdaten
Training mit BP Schrittweite 0,05

wobei mir auch auffällt, dass bei der 3-Kreuzvalidierung (nach oben beschriebenem System) ein Datensatz eine Tendenz hat, sich besser zum Lernen zu eignen,
allerdings ebenso auffällig ist, dass der Lernerfolg wohl stark abhängig vom zufällig gewichteten Netz zum Lernbeginn abhängig ist.
--> Daraus einmal abgeleitet die Frage: Ist es ggf sinnvoll eine Netztopologie mit verschiedenen Startgewichtungen lernen zu lassen?

(Das 3-50-40-30-20-10-5-1-MLP hat bei 47.500 WH mittlerweile 0,0022 erreicht - Tendenz fallend)

Grüße
Thomas

Edith sagt:
bei ca 72.000 die 0,001 erreicht.
Starke Vermutung, dass der Lernerfolg ebenso abhängig vom Verhältnis Schrittweite/gewichtete Verbindungen ist,
d.h. ggf höhere Erfolgsaussichten bei weniger komplexen Netzen, wenn die Schrittweite stück für Stück verringert wird.

bei 0,0005 hab ich mal wieder nen Break reingehauen, und erreiche damit:
Image
iss ja schomal nicht schlecht.
Da ich nebenher nochmal in den Bereich mit den Scripten gelinst hab, jetzt die Überlegung, mich da reinzuarbeiten, um es ggf zu ermöglichen mehrere Netze (ggf auch mehrmals) über Nacht/das Wochenende abarbeiten zu lassen.
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: KNN zur Kennfelderkennung

Post by Admin »

Admin wrote:iss ja schomal nicht schlecht.
Es handelt sich hierbei um die Reaktion des Netzes auf Validierungsdaten, nehme ich an? In disem Fall sieht es wirklich nicht schlecht aus, wobei 'schlecht' und 'gut' immer nur durch die jeweils angedachte Verwendung definiert werden können.
Admin wrote:Da ich nebenher nochmal in den Bereich mit den Scripten gelinst hab, jetzt die Überlegung, mich da reinzuarbeiten, um es ggf zu ermöglichen mehrere Netze (ggf auch mehrmals) über Nacht/das Wochenende abarbeiten zu lassen.
Das macht sehr viel Sinn, ja. Wenn man wirklich effektiv und vor allem leicht reproduzierbar arbeiten will, dann ist das Skripting allerwärmstens zu empfehlen. Wenn man manuell mit mehreren Datensätzen arbeitet, macht man sehr schnell einen Fehler, verklickt sich mal oder versäumt ein Häkchen zu setzen und schon hat man ein anderes Ergebnis und weiß nicht, warum.

Viele Grüße
Thomas Jetter
User avatar
Hanisch
Posts: 15
Joined: Thu 31. Mar 2011, 17:14
Location: Mannheim

Re: KNN zur Kennfelderkennung

Post by Hanisch »

Danke!
Es ist nicht die Antwort auf die Validierungsdaten, sondern die 756 Gesamtdaten, die 320 Trainingsdatensätze sind also mit abgebildet.
Scripting bin ich am einlesen - und habs mittlerweile schonmal geschafft mit nem Beispiel den Basisscript zum laufen zu bringen...
(ist ja schonmal nich schlecht, so als Maschbauer ;-) ) und versuch mich gerade daran, den ein wenig abzuwandeln,
bzw hab mir gleich mal ein größeres Projekt als Ziel gesetzt, und werd versuchen, mich da langsam hinzuhangeln.
Als ersten Schritt hab ich mir mal überlegt, das Basis-Script dazu zu bringen die Antwort von jedem Wiederholungslauf nach abgelaufener maximaler Trainingszeit gesondert abzuspeichern,
um zum einen ein Gefühl für den Script, zum anderen für die Auswirkungen der Zufallsgewichtung zu bekommen.
Post Reply