Laden von neuronalen Netz

Dieses Forum beschäftigt sich mit allen Fragen, Kommentaren und Anregungen zu MemBrain Skripten. Auch der Austausch von Skripten zwischen MemBrain Benutzern soll hiermit gefördert werden.
Wenn Sie ein interessantes Skript haben, das Sie anderen MemBrain Benutzern zur Verfügung stellen wollen, dann Erstellen Sie dafür jeweils bitte ein neues Thema in diesem Forum. Der Titel des Themas sollte es anderen Benutzern erlauben möglichst schnell zu erfassen, wozu Ihr Skript dient.
Post Reply
spp
Posts: 3
Joined: Mon 7. May 2012, 19:30

Laden von neuronalen Netz

Post by spp » Mon 7. May 2012, 19:53

Hallo!

Ich versuche gerade ein in Membrain erstelltes neuronales Netz mit dem C#-Wrapper zu laden. Allerdings schlägt dies immer fehl, d.h. false wird zurückgegeben (EMBRetVal.MEMBRAIN_ERR).
Die Datei exisitiert definitiv und es ist auch definitiv eine mit Membrain erstellte *.mbn-Datei, deswegen weiß ich gerade nicht mehr weiter.

Danke im Voraus!

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

Re: Laden von neuronalen Netz

Post by Admin » Mon 7. May 2012, 21:52

Hallo,

eine erste mögliche Fehlerquelle wäre eine veraltete dll (Version 03.xx.xx.xx), mit der ein Netz geladen werden soll, das mit MemBrain 04.00.00.00 erstellt wurde. Durch die Umstellung auf 64-Bit Repräsentation aller Datentypen im Netz sind die Netze nicht mehr kompatibel. Die neue dll kann natürlich Netze laden, die mit der alten MemBrain Version erzeugt wurden, umgekehrt klappt das aber nicht.

Was wird denn für eine dll-Version zurückgegeben (Methode MemBrain::GetVersionInfo())?

Wenn eine veraltete Version zurückgegeben wird, dann befindet sich irgendwo im Suchpfad von Windows noch eine alte dll Version. Einfach mal im Explorer alles nach der 'MemBrainDll.dll' durchsuchen.

Viele Grüße
Thomas Jetter

spp
Posts: 3
Joined: Mon 7. May 2012, 19:30

Re: Laden von neuronalen Netz

Post by spp » Mon 7. May 2012, 23:09

Das wars wirklich!! Wahrscheinlich kam die DLL über meinen Laptop auf dem eine bisschen ältere Version von Membrain drauf ist.

Ich danke dir!

Es ist wirklich schön, dass eine C#-Wrapper-Klasse existiert, allerdings ist diese nicht sooo schön gelungen. Man hätte die Gelegenheit nutzen können und den ganzen unsafe-Code nach außen hin zu verbergen. Außerdem hätte man die byte[] direkt in strings wandeln können. Ein weiterer Vorschlag wäre, die Kommentare über den Methoden in die speziellen C#-Kommentare zu packen (wie JavaDoc). Dies hätte den Vorteil, dass man beim Programmieren, wenn das Intellisense aufploppt dort die Kommentare lesen kann und Infos zu den Parametern/Return-Values bekommt.

Zum Beispiel:
/// <summary>
/// Get the version information string of the DLL.
/// </summary>
/// <param name="version">Outs version of Membrain-DLL as string.</param>
/// <returns>true if succeeds; false if not.</returns>
public bool MB_GetVersionInfo(out string version){ //Code }

Aber das sind nur ein paar Kleinigkeiten die mir aufgefallen sind. Nochmal Danke und weiter so!

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

Re: Laden von neuronalen Netz

Post by Admin » Tue 8. May 2012, 06:55

Hallo,

schön, dass es jetzt klappt!
spp wrote:Es ist wirklich schön, dass eine C#-Wrapper-Klasse existiert, allerdings ist diese nicht sooo schön gelungen. Man hätte die Gelegenheit nutzen können und den ganzen unsafe-Code nach außen hin zu verbergen. Außerdem hätte man die byte[] direkt in strings wandeln können. in weiterer Vorschlag wäre, die Kommentare über den Methoden in die speziellen C#-Kommentare zu packen (wie JavaDoc). Dies hätte den Vorteil, dass man beim Programmieren, wenn das Intellisense aufploppt dort die Kommentare lesen kann und Infos zu den Parametern/Return-Values bekommt.
Die Klasse MB_DLL.cs stammt nicht von mir, diese Grundlage hat ein MemBrain User freundlicherweise beigesteuert.
Allerdings habe ich die objektorientierten Wrapper MemBrain.cs, Lesson.cs und NeuralNet.cs drum herum, gebaut. Diese sollten die gewünschten Eigenschaften aufweisen, oder? Außerdem erlauben sie eine objektorientierte Verwendung, man arbeitet wirklich mit Netzen und Lessons, und nicht mit statischen Methoden. Indizes für Netze und Lessons in der dll gehören damit unter C# auch der Vergangenheit an, das wird alles in diesen Klassen verkapselt.
Das Downloadpaket enthält auch ein Beispiel-Projekt, das die Verwendung zeigt. Mit der Klasse MB_DLL hat man dann direkt gar nichts mehr zu tun.

Diese Wrapper sind seit der MB Version 04.00.00.00 neu hinzugekommen, vielleicht haben Sie sie noch gar nicht gesehen? Durch die Wrapper werden auch alle neuen Funktionen der dll zum Editieren von Netzen unterstützt.

Viele Grüße
Thomas Jetter

spp
Posts: 3
Joined: Mon 7. May 2012, 19:30

Re: Laden von neuronalen Netz

Post by spp » Tue 8. May 2012, 10:09

Du hast Recht, es ist mir nicht aufgefallen, dass es eine neue Version gibt (Gibt es denn irgendwo News?). Weder bei Membrain noch bei den Wrappern. Ich habe in der Zwischenzeit die Klasse MB_DLL komplett umgeschrieben. Hätte sie auch zur Verfügung gestellt, allerdings hast du das Problem ja schon selber gelöst ;D. Das objektorientierte "außen rum" ist bei mir allerdings projektspezifisch.

Grüße

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

Re: Laden von neuronalen Netz

Post by Admin » Tue 8. May 2012, 12:39

spp wrote:(Gibt es denn irgendwo News?)
Ja, es gibt einen 'Newsletter', den ich immer versende, wenn eine neue Version von MemBrain erscheint.
Im Moment kann man sich für den Newsletter während der Bestellung einer Lizenz anmelden. Das ist aber natürlich eine rein technische Einschränkung, die Homepage sieht losgelöst vom Bestellvorgang keine Anmeldung für den Newsletter vor. Wenn Du mir eine kurze E-Mail schreibst, dann nehme ich Dich gerne in die Adressatenliste auf.

Viele Grüße und viel Erfolg!
Thomas Jetter

Post Reply