Probleme bei Schnittstelle zwischen Java und Membrain

Haben Sie Fragen zur Bedienung bestimmter Features von MemBrain? Sind Sie nicht sicher, welches Häkchen was bewirkt? Möchten Sie wissen, ob eine bestimmte Funktionalität in MemBrain vorhanden ist oder nicht?

Dann stellen Sie Ihre Fragen hier!
Negi
Posts: 14
Joined: Wed 8. Dec 2010, 15:23

Probleme bei Schnittstelle zwischen Java und Membrain

Post 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.
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Probleme bei Schnittstelle zwischen Java und Membrain

Post 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
Thomas Jetter
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Probleme bei Schnittstelle zwischen Java und Membrain

Post by TJetter »

Hallo nochmal,

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

Viele Grüße
Thomas Jetter
Negi
Posts: 14
Joined: Wed 8. Dec 2010, 15:23

Re: Probleme bei Schnittstelle zwischen Java und Membrain

Post by Negi »

Ich bin leider noch nicht dazu gekommen das zu testen. Ich werde es das Wochenende über einmal ausprobieren.
Negi
Posts: 14
Joined: Wed 8. Dec 2010, 15:23

Re: Probleme bei Schnittstelle zwischen Java und Membrain

Post 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.
Attachments
net.mbn
(10.18 KiB) Downloaded 619 times
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Probleme bei Schnittstelle zwischen Java und Membrain

Post 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
Thomas Jetter
Negi
Posts: 14
Joined: Wed 8. Dec 2010, 15:23

Re: Probleme bei Schnittstelle zwischen Java und Membrain

Post 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);
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Probleme bei Schnittstelle zwischen Java und Membrain

Post 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
Thomas Jetter
Negi
Posts: 14
Joined: Wed 8. Dec 2010, 15:23

Re: Probleme bei Schnittstelle zwischen Java und Membrain

Post 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.
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Probleme bei Schnittstelle zwischen Java und Membrain

Post 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
Thomas Jetter
Post Reply