Lernende Vektorquantisierung - Implementation und Speicherung

Microsamp

Neues Mitglied
Hallo,

ich wollte letztens mich mit neuronalen Netzen beschäftigen(siehe Überschrift). Hierbei habe ich mir ein Plan überlegt welche Daten ich verarbeiten will und was mein Ziel sein soll:
Ich möchte viele Daten(3D Vektoren) in Kategorien einordnen können und mein Programm soll neue Daten wiederum zu einer von vielen Kategorien zuordnen können (mit der höchsten Wahrscheinlichkeit). Hierbei möchte ich das erlernte speichern können und später erweitern oder wiederum verwenden um neue Daten zu kategorisieren. (Dies habe ich bisher nur mit den Input-Daten gemacht, da hier noch die restliche Implementation fehlt) Ps: Sollte dies zu unverständlich sein, würde ich ein ausführlicheren Kommentar verfassen.

Ich habe auf vielen Seiten, hier im Forum, und auf YT (ja ich weiß...) gesucht und bisher auch mir das Grundprinzip eines neuronalen Netzwerkes erschließen können. Natürlich lese ich dennoch weitere Artikel um die Implementation voranzubringen mit (eventuell) verbesserten Verständnis.

Als API verwende ich momentan Snipe mit dem Setting 'TopologyFeedForward' und eines Lernfaktors von 0.01 .
Des weiteren verwende ich Player-Movements um auswertbare Daten zu erhalten.
Hierbei habe ich im Durchschnitt 10k bis 100k Datensätze, welche aus Vektoren bestehen (hier werden doubles verwendet).
Mein Input speichere ich im Moment in einem Vector(/Liste). Sobald mein Input fertig ist, werden meine Daten als String gespeichert in einem File. Der Aufbau sieht folgendermaßen aus:
Code:
x,y,z;x1,y1,z1;x2,y2,z2;
Dies klappt soweit ohne Probleme und recht schnell durch die Verwendung eines StringBuilders.

Jetzt kommt aber das eigtl. Problem: 1. Wie soll ich den Output auswerten(bisher kann ich nur gering was damit anfangen, trotz relativ viel Lektüre) ? 2. Wie speichere ich die verschiedenen Kategorien und lass neue Daten zu einer zuordnen ? 3. Wie soll ich ein Fortschritt in eine Datei schreiben ? 4. Was hat es zu bedeuten, dass der gleiche Input bei verschiedenen Tests (Neustart des Programms) verschiedene Outputs erzeugt ?

Ich weiß, dass mir teils in einigen Punkten Verständnis fehlt, aber da ich die mathematischen Fähigkeiten nicht vollkommen besitze um die Abstraktionen zu verstehen, versuche ich im Moment weitere Erklärungen zu finden.

Danke schon mal im Voraus für Links oder sogar Erklärungen !

Mit freundlichen Grüßen Microsamp
 

Microsamp

Neues Mitglied
Kennt sich denn niemand mit neuronalen Netzen aus, der mir helfen könnte ?

Ich habe jetzt etwas weiter gearbeitet und verwende nun die JSAT ( https://github.com/EdwardRaff/JSAT/blob/master/JSAT/src/jsat/classifiers/neuralnetwork/LVQ.java ) API. Mit dieser habe ich ein LVQ Objekt erzeugt und einiges bisher weiter implementiert.

Jetzt habe ich aber ein Problem: Ich lass ihn abwechselnd immer wieder von beiden Klassen(Kategorien) lernen und prüfe ab und zu, ob er denn alles richtig verarbeitet. Hier liegt jedoch das Problem: Er bevorzugt immer die als letztes trainierte Klasse. Obwohl diese sich sehr unterscheiden. Somit kriege ich fast immer false-positives raus.
Als LVQ Settings übergebe ich dem Konskruktor folgendes:
Java:
new LVQ(new EuclideanDistance(), 1000, 0.01 , 1);
Die 1000 steht für die Iterationen und die 0.01 für die Lernrate.
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben