Page 1 of 2

Probleme bei Schnittstelle zwischen Java und Membrain

Posted: Mon 28. Jul 2014, 17:43
by Negi
Hallo,

Ich nutze den von Membrain mitgelieferten Wrapper für Java unter einem 64 Bit System. Von daher nutze ich auch die 64Bit DLL's von Membrain. Nun tritt Folgendes Problem auf.
Wenn ich versuche über den Wrapper mit den Dll's aus das Neuronale Netz zuzugreifen und Daten zu Übertragen kommt es dabei zu Fehlen. Sowohl Die Namen der Neuronen können nicht ausgelesen werden aber auch Activations welche ich übertrage kommen falsch und in viel zu niedrigen Wert an (xxx e-325). Ich kann mir diesen Fehler absolut nicht erklären und haben diesen auch erst seitdem ich auf eine neure Version von Membrain geupgraded habe.

Kennt jemand eine Lösung außer eine ältere Version von Membrain zu nutzen? Ich habe die Netze schon alle auf die aktuelle Version geupdated.

Re: Probleme bei Schnittstelle zwischen Java und Membrain

Posted: Mon 28. Jul 2014, 18:43
by TJetter
Hallo,

als erstes gilt es abzuklären, ob Java nicht hinter den Kulissen eine ältere MemBrain dll Version verwendet, was dann in Verbindung mit den Netzen, die bereits mit einer neueren MemBrain Version erstellt wurden, zu Problemen führt.
Bitte einmal die beiden folgenden Methoden des Java-Wrappers aufrufen und prüfen, welche Strings zurückgeliefert werden:

Code: Select all

/// Get the version information string of the Wrapper DLL.
	public static native String GetWrapperVersionInfo();

	/// Get the version information string of the DLL.
	public static native String MBGetVersionInfo();
Dabei müssen die auf der Homepage für die neueste Version angegebenen Informationen zurückkommen:
MemBrain DLL Version 04.01.00.00 (2014-01-04)
MemBrain JNI Wrapper DLL Version 04.01.00.00 (2014-01-04)

Falls abweichende Informationen gelesen werden, dann liegt irgendwo im auf dem Rechner noch eine alte MemBrain DLL Version herum, vorzugsweise unter C:\Windows\System32 oder oder C:\Windows\SysWOW64. EInfach den ganzen Rechner nach den folgenden Dateien durchsuchen:
- MBDllWrapper.dll
- MBDllWrapper64.dll
- MemBrainDll.dll
- MemBrainDll64.dll
Die Dateien überall löschen, außer im Unterverzeichnis \DLL der MemBrain Installation. Dann die Dateien aus diesem Unterverzeichnis wieder dorthin kopieren, wo sie benötigt werden.

Wenn das das Problem nicht löst, dann bitte ein Beispielnetz, das mit der DLL zusammen nicht funktioniert, hier posten, damit ich die Sache analysieren kann. Bitte auch zusammen mit einer genauen Angabe, was erwartet wäre und was die DLL abweichend davon zurückgibt.

Viele Grüße

Re: Probleme bei Schnittstelle zwischen Java und Membrain

Posted: Thu 7. Aug 2014, 06:51
by TJetter
Hallo nochmal,

gibt es mittlerweile Neuigkeiten, haben die Hinweise oben das Problem gelöst?

Viele Grüße

Re: Probleme bei Schnittstelle zwischen Java und Membrain

Posted: Thu 7. Aug 2014, 17:55
by Negi
Ich bin leider noch nicht dazu gekommen das zu testen. Ich werde es das Wochenende über einmal ausprobieren.

Re: Probleme bei Schnittstelle zwischen Java und Membrain

Posted: Mon 11. Aug 2014, 00:05
by Negi
Ich hatte tatsächlich veraltet Versionen der dll's genutzt. Habe diese nun mit den aktuellen ersetzt und die Übertragung der Werte an das Netz funktioniert. Allerdings nicht vom Netz nach Java hin. Die Namen werden noch immer nicht richtig Ausgelesen genauso wie das Ergebnis. Eine Beispielversion des Netzes hänge ich an.
Die Berechnung in Membrain selber funktioniert, das habe ich bereits getestet. Es werden auch korrekte Ergebnisse errechnet.

Sollten noch weitere Informationen benötigt werden bitte einfach Melden.

Re: Probleme bei Schnittstelle zwischen Java und Membrain

Posted: Mon 11. Aug 2014, 07:01
by TJetter
Hallo,

zur Analyse bräuchte ich noch das Stück Java-Code, das die Namen und die Ausgangswerte des Netzes liest. Außerdem ein Beispiel, was gelesen wird und was erwartet wird.
Kommt denn nun die korrekte 'Version Info' von dll und Wrapper-dll zurück?

Grüße

Re: Probleme bei Schnittstelle zwischen Java und Membrain

Posted: Mon 11. Aug 2014, 22:08
by Negi
Hallo,

hier der Code für das Schreiben und Lesen der Daten. Erwartet wird bei den Namen der Name, welcher in Membrain den Neuronen zugewiesen wurde. Als Ausgabewert ist erstmal jeder Wert >=450 Akzeptabel, da bisher immer ein Wert im Wertebereich von 1,xxx E-125 heraus kommt.
Und zum Thema Wrapper: Nachdem ich die Aktuellsten dll's Kopiert habe zeigt mir der Ausruf auch die richtigen Versionen an.

Code: Select all

 for(int i=0; i<temp.length; i++){
            double neuron = 0.0;


			try
			{
				neuron = Double.parseDouble(temp[i]);
                System.out.println(neuron);
			}
			catch
			(
				NumberFormatException e
			)  {e.printStackTrace();}

			de.membrainminusnn.MBDllWrapper.MBApplyInputAct(i, neuron);
			de.membrainminusnn.MBDllWrapper.MBGetInputAct(i);
			System.out.println(de.membrainminusnn.MBDllWrapper.MBGetInputName(i)+" : "+neuron);

        }
	de.membrainminusnn.MBDllWrapper.MBThinkStep();
	
	double TA1=de.membrainminusnn.MBDllWrapper.MBGetOutputAct(0);

Re: Probleme bei Schnittstelle zwischen Java und Membrain

Posted: Tue 12. Aug 2014, 06:44
by TJetter
Als erstes bitte einmal nach jedem Aufruf die folgende Methode des Java Wrappers aufrufen:

Code: Select all

/// Get the last error code (if any, else 0). Call automatically clears error for sure.
	public static native int GetLastError();
Es muss immer 0 zurückkommen. Ein Aufruf gibt den letzten Fehlercode zurück und löscht diesen. So wissen wir zunächst einmal, ob die Aufrufe überhaupt aus Sicht der dll 'gut gehen'.
--> Klappt das?

Dann fällt mir auf den ersten Blick auf, dass der Aufruf

Code: Select all

de.membrainminusnn.MBDllWrapper.MBGetInputAct(i);
seinen Rückgabewert gar nicht auswertet. Das sollte aber natürlich erst einmal nicht stören.

Grüße

Re: Probleme bei Schnittstelle zwischen Java und Membrain

Posted: Tue 12. Aug 2014, 12:26
by Negi
Ok ich habe grade einmal die Methode GetLastError() nach jeder Aktion aufgerufen die ich auf dem Netz ausführe und bekomme ab dem Laden des Netzes den Fehlercode -1.

Re: Probleme bei Schnittstelle zwischen Java und Membrain

Posted: Tue 12. Aug 2014, 13:49
by TJetter
Negi wrote:Ok ich habe grade einmal die Methode GetLastError() nach jeder Aktion aufgerufen die ich auf dem Netz ausführe und bekomme ab dem Laden des Netzes den Fehlercode -1.
Dann würde ich als erstes einmal das Laden mit absoluter (vollständiger) Pfadangabe versuchen. Vielleicht wird die Datei nicht gefunden?
Grüße