SOM-Import über DLL
SOM-Import über DLL
Hallo,
ich möchte die Membrain-DLL nutzen, um in Metatrader4 mit künstlichen neuronalen Netzen arbeiten zu können. Das scheint auch zu funktionieren, allerdings nicht für Netze, welche ich über "competitive with momentum" trainiert habe. Die anderen Netze kann ich hingegen ganz einfach mit MB_LoadNet() importieren. Woran kann das liegen?
Danke euch
ich möchte die Membrain-DLL nutzen, um in Metatrader4 mit künstlichen neuronalen Netzen arbeiten zu können. Das scheint auch zu funktionieren, allerdings nicht für Netze, welche ich über "competitive with momentum" trainiert habe. Die anderen Netze kann ich hingegen ganz einfach mit MB_LoadNet() importieren. Woran kann das liegen?
Danke euch
Re: SOM-Import über DLL
Was passiert denn wenn Du ein solches Netz über die Dll zu laden versuchst, bzw. Woran siehst Du, dass es nicht funktioniert? Ggf. bitte ein Netz posten, so dass ich das Problem reproduzieren kann.
Viele Grüße
Viele Grüße
Thomas Jetter
Re: SOM-Import über DLL
Hallo Thomas,
danke für die schnelle Antwort.
Dass es nicht funktioniert, sehe ich daran, dass mir die Funktion MB_LoadNet() (oder vielmehr __MB_LoadNet@4()) keine Null zurückschreibt. Das stünde ja dafür, dass es korrekt geladen worden ist. Anbei ein Beispielnetz.
Wo ich gerade dabei bin: gibt es eine Möglichkeit, auch die Gewichte der zu einem Output führenden Links via DLL zu eruieren? Wenn ich das richtig verstehe, dann repräsentieren diese ja quasi das Grundmuster, mit welchem die Inputs verglichen werden.
Vielen Dank nochmal,
madxzen
danke für die schnelle Antwort.
Dass es nicht funktioniert, sehe ich daran, dass mir die Funktion MB_LoadNet() (oder vielmehr __MB_LoadNet@4()) keine Null zurückschreibt. Das stünde ja dafür, dass es korrekt geladen worden ist. Anbei ein Beispielnetz.
Wo ich gerade dabei bin: gibt es eine Möglichkeit, auch die Gewichte der zu einem Output führenden Links via DLL zu eruieren? Wenn ich das richtig verstehe, dann repräsentieren diese ja quasi das Grundmuster, mit welchem die Inputs verglichen werden.
Vielen Dank nochmal,
madxzen
- Attachments
-
- SOM_MQ4.mbn
- (38.46 KiB) Downloaded 748 times
Re: SOM-Import über DLL
Hallo zurück,
also, das angehängte Netz ist mit der neuesten MemBrain-Version (04.00.00.00) erstellt worden. Meine Vermutung ist, dass die bei Dir verwendete dll eine ältere Versionsnummer hat (also 03.xx.xx.xx).
Mit der 04.00.00.00 hat sich das Dateiformat von MemBrain-Netzen verändert, da alle internen Berechnungen nun in 64-Bit verarbeitet und abgespeichert werden (früher an vielen Stellen noch 32 Bit).
Kann es sein, dass das andere Netz, das einwandfrei geladen wird, mit einer MemBrain Version 03.xx.xx.xx erstellt (und abgespeichert) wurde?
EInfach mal die Versionsnummer der dll abfragen (dll Funktion _MB_GetVersionInfo()) und prüfen...
Es kann gut sein, dass in Deinem C:\Windows\System32 oder auch C:\Windows\SysWOW64 Verzeichnis noch eine alte dll liegt, die von Deiner Applikation verwendet wird. Diese muss mit der neuen Dll aus dem MemBrain Installations-Verzeichnis ersetzt werden.
Löst das Dein Problem?
Viele Grüße,
Thomas
also, das angehängte Netz ist mit der neuesten MemBrain-Version (04.00.00.00) erstellt worden. Meine Vermutung ist, dass die bei Dir verwendete dll eine ältere Versionsnummer hat (also 03.xx.xx.xx).
Mit der 04.00.00.00 hat sich das Dateiformat von MemBrain-Netzen verändert, da alle internen Berechnungen nun in 64-Bit verarbeitet und abgespeichert werden (früher an vielen Stellen noch 32 Bit).
Kann es sein, dass das andere Netz, das einwandfrei geladen wird, mit einer MemBrain Version 03.xx.xx.xx erstellt (und abgespeichert) wurde?
EInfach mal die Versionsnummer der dll abfragen (dll Funktion _MB_GetVersionInfo()) und prüfen...
Es kann gut sein, dass in Deinem C:\Windows\System32 oder auch C:\Windows\SysWOW64 Verzeichnis noch eine alte dll liegt, die von Deiner Applikation verwendet wird. Diese muss mit der neuen Dll aus dem MemBrain Installations-Verzeichnis ersetzt werden.
Löst das Dein Problem?
Viele Grüße,
Thomas
Thomas Jetter
Re: SOM-Import über DLL
Hallo nochmal,
du hattest Recht, da hat sich noch eine alte Version der DLL versteckt. VIELEN Dank für die Hilfe!
Was meinst du zu der Frage mit den Links? Kann man deren Gewichte irgendwie auslesen?
Danke nochmal und Gruss,
madxzen
P.S.: grossen Respekt für die tolle Arbeit mit diesem Projekt!
du hattest Recht, da hat sich noch eine alte Version der DLL versteckt. VIELEN Dank für die Hilfe!
Was meinst du zu der Frage mit den Links? Kann man deren Gewichte irgendwie auslesen?
Danke nochmal und Gruss,
madxzen
P.S.: grossen Respekt für die tolle Arbeit mit diesem Projekt!
Re: SOM-Import über DLL
Mit der dll ab 04.00.00.00 geht das, ja. Ob es Sinn macht, kann ich spontan nicht abschätzen, aber es geht.madxzen wrote:Was meinst du zu der Frage mit den Links? Kann man deren Gewichte irgendwie auslesen?
Wenn Du Dir im dll header mal die folgenden Dinge ansiehst:
1.) Struktur für die Daten eines Links, da ist auch das Gewicht mit dabei:
Code: Select all
/// Parameter structure to describe link properties
typedef struct
{
double weight;
BOOL lockWeight;
_MB_INT length; // 1..10000
BOOL displayWeight;
} SMBLinkProp;
Code: Select all
/// Get the properties of the selected link
MB_DLL_RETURN(EMBRetVal) _MB_GetSelectedLinkProp(SMBLinkProp* pProp);
Code: Select all
/// Select all links from Extra Selection to Selection
MB_DLL_RETURN(void) _MB_SelectFromExtra();
Code: Select all
/// Select an input neuron
MB_DLL_RETURN(EMBRetVal) _MB_SelectInput(_MB_INT InNeuronIdx, BOOL addToSelection);
Code: Select all
/// Apply Extra Selection to the current selection
MB_DLL_RETURN(void) _MB_ExtraSelection();
Code: Select all
/// Select an output neuron
MB_DLL_RETURN(EMBRetVal) _MB_SelectOutput(_MB_INT OutNeuronIdx, BOOL addToSelection);
Allerdings würde ich bei einer SOM eher nach dem Winner-Neuron nach einem Think Step suchen, anstatt über die Links zu gehen. Dieses bekommst Du mit
Code: Select all
/// Get index of the last output winner neuron of the net. Return -1 if unknown. Else
/// return the output neuron index of the winner neuron.
MB_DLL_RETURN(_MB_INT) _MB_GetOutputWinnerNeuron(void);
Thomas Jetter
Re: SOM-Import über DLL
Phantastisch, funktioniert, herzlichsten Dank!