KNN liefert beim Export falsche Werte

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
Lackaffe
Posts: 6
Joined: Wed 6. Apr 2011, 11:07

KNN liefert beim Export falsche Werte

Post by Lackaffe »

Hallo zusammen,

zuerst möchte ich sagen das MemBrain ein wirklich tolles Programm ist und ich die / den Macher sehr schätze! Zu meiner Frage: Ich habe versucht mit MemBrain eine Interpolation des Sinus zu entwickeln was auch funktioniert hat. Das Netz liefert korrekte Werte für das Intervall -Pi bis Pi.

Nachdem ich das Netz nun mittels der DLL in eine Java-Anwendung exportieren wollte, habe ich festgestellt das die Werte nicht mehr mit denen aus MemBrain übereinstimmen. Meine Frage ist nun ob ich etwas nicht beachtet habe oder ob ich etwas falsch gemacht habe??

Kann dieser Fehler etwa daher rühren, dass ich die Daten normalisiert habe? Also das MemBrain dies richtig umrechnet und dies bei der Java-anwendung fehlt?

Ich würde mich freuen wenn mir jemand einen Tipp geben könnte.

Viele Grüße

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

Re: KNN liefert beim Export falsche Werte

Post by Admin »

Hallo,

zunächst ganz wichtig: Welche MemBrain Dll Version wird verwendet?

Es gab ein paar Tage, in denen eine nicht-funktionale Dll im MemBrain Installer enthalten war (27. bis 31. März, Dll Version 03.02.00.00). Dies würde die Sache bereits erklären.

Seit 31. März gibt es eine neue Version der dll (03.02.00.01). Einfach den MemBrain Installer herunterladen und erneut ausführen und sicherstellen, dass diese Dll Version verwendet wird.

Vielleicht löst das das Problem schon? Wenn nicht, dann bitte das Netz, Beispieldaten und/oder Skripte hier posten mit ein paar Erläuterungen, dann kann man die Sache besser untersuchen.

Viele Grüße soweit
Lackaffe
Posts: 6
Joined: Wed 6. Apr 2011, 11:07

Re: KNN liefert beim Export falsche Werte

Post by Lackaffe »

Hallo,

also ich hab mal über eine Anfrage in Java herausgefunden dass die Version von der DLL die folgende ist:
MemBrain Dll V03.02.00.01 (Mar 31 2011). Also fällt dies als Fehlerquelle wohl weg.

z.b. sollte: wenn ich in das netz in Membrain die zahl 0.628 eingebe (soll in etwa 2* Pi betragen , ich habe alle eingabe-werte durch 10 geteilt damit sie im intervall 0...1 liegen) sollte in etwa null rauskommen.


der wert bei MemBrain liegt bei -0.0579923271467372 , ist also korrekt .


wenn ich 0.628 in das selbe Netze (also die selbe mbn-datei) in java eingebe erhalte ich jedoch 0.47100383043289185 , was nicht korrekt ist.


und das ist das ganze Problem.


Viele Grüße

L.A.
Attachments
Haupt-java-code.txt
enthaelt den Javacode zum starten des netzes
(642 Bytes) Downloaded 683 times
sinus.mbn
enthaelt das zurueckgesetze netz
(3.62 KiB) Downloaded 667 times
test-50p.mbl
enthaelt die Testdaten
(1.94 KiB) Downloaded 637 times
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: KNN liefert beim Export falsche Werte

Post by Admin »

Hallo,

ich kann es im Moment nicht austesten, aber nach Durchsicht Deines Codes liegt das Hauptproblem hier:

Code: Select all

System.out.println(MBDllWrapper.MBGetOutputOut(0));
Die Funktion MBGetOutputOut liest das 'Output'-Signal des Ausgangsneurons. Was in MemBrain aber angezeigt wird, und was meist von Hauptinteresse ist, ist die Aktivierung, nicht der Output. Alle Trainingsdaten sind ebenso auf Aktivierungen bezogen. Ausgangssignale sind bei MemBrain immer interne Wertebereiche, nicht Nutzerwertebereiche. Wenn das Ausgangsneuron - wie im vorliegenden Fall - eine LOGISTIC Übertragungsfunktion hat (interner Wertebereich 0 .. 1), sein benutzerdefinierter Wertebereich der Aktivierung - wie hier aber auf auf -1 .. 1 steht, dann entspricht der angezeigten, benutzerdefinierten Aktivierung '0' die interne Aktivierung '0.5', dafür sorgt die Normalisierungsfunktion.
Der Output des Neurons nimmt nun widerum die interne Aktivierung an, stellt sich also auf ca. 0.5 ein.

Lange Rede kurzer Sinn: Für den Benutzer sind eigentlich immer nur Aktivierungen von Interesse, diese sind nach außen auch immer auf Benutzerdefinierte Werte umgerechnet.

Im vorliegenden Fall sollte also das Ersetzen obiger Codezeile durch:

Code: Select all

System.out.println(MBDllWrapper.MBGetOutputAct(0));
helfen.

Weitere Anmerkung: Eine manuelle Vorabnormalisierung der Daten ist nicht notwendig, MemBrain tut das selbst: Einfach die Normalsiserungseinstellungen des Eingangsneurons auf -2*PI .. +2*PI stellen, dann kann man direkt 6.28 eingeben und muss nicht alles durch 10 teilen. Dies wird auch von der dll entsprechend unterstützt.

Klappt es damit?

Noch eine Anmerkung:
Wenn ich beim geposteten Netz in MemBrain den Wert -0.628 am Eingangsneuron setze, dann erhalte ich am Ausgangeneuron den Wert -0.459 und nicht ca. 0. Habe das Nezu aber auch vorher nicht trainiert o.ä. Ist das gepostete Netz noch untrainiert? Das würde das natürlich erklären.

Viele Grüße
Lackaffe
Posts: 6
Joined: Wed 6. Apr 2011, 11:07

Re: KNN liefert beim Export falsche Werte

Post by Lackaffe »

Hallo,

also mit der von dir geschriebenen Funktion kommt der richtige wert raus ( Netz(0.628) ist in etwa 0 ). Diese Feinheiten habe ich nicht beachtet da es mein erstes Projekt mit MemBrain ist.

Beim nächsten Mal werde ich die Normalisierungseinstellung von MemBrain verwenden., da das andere einwenig umständlich ist.

Das Netz wurde von mir mit Werten aus dem Intervall 0 ... 2*Pi traniert. Deswegen stimmt der Wert bei -2*Pi nicht.

Ich danke dir nochmals sehr. Nun kann ich da weiterbasteln.

Viele Grüße

L.A.
Post Reply