an unnamed file was not found

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!
Tuefftler
Posts: 25
Joined: Mon 9. Dec 2013, 19:40

Re: an unnamed file was not found

Post by Tuefftler » Sun 15. Dec 2013, 12:31

Hallo Thomas,

1. ok prima - also die TrainValidate_mit_trainiertem_Netz.as macht das, was ich von ihr erwarte. Die Frage ist also erledigt.

2. habe zwar fast kein Wort von dem verstanden, was Du mir zur Verwendung der DLL geschrieben hast, aber werde versuchen mich einzufummeln.

3. Kannst Du mir bitte noch 'was zu meiner Frage davor sagen, die lautete:

ich hab' auch gleich noch 'ne Frage zum Script TrainValidate.as.

Ich lasse dieses Script mehrere Male mit demselben Netz und denselben Trainings- und denselben Validation-Daten und mit der exakt gleichen Trainingszeit von 4 Sekunden laufen
und vergleiche dann die Vorhersagegüte dieser verschiedenen Läufe.

Dabei stelle ich fest, dass die Güte jeweils ziemlich unterschiedlich ausfällt. Liegt das daran,
dass die Güte total abhängig vom Randomizen des Netzes ist, oder woran liegt das?

Viele Grüße
Harry

User avatar
TJetter
Posts: 306
Joined: Sat 13. Oct 2012, 12:04

Re: an unnamed file was not found

Post by TJetter » Sun 15. Dec 2013, 13:58

Tuefftler wrote:3. Kannst Du mir bitte noch 'was zu meiner Frage davor sagen, die lautete:

ich hab' auch gleich noch 'ne Frage zum Script TrainValidate.as.

Ich lasse dieses Script mehrere Male mit demselben Netz und denselben Trainings- und denselben Validation-Daten und mit der exakt gleichen Trainingszeit von 4 Sekunden laufen
und vergleiche dann die Vorhersagegüte dieser verschiedenen Läufe.

Dabei stelle ich fest, dass die Güte jeweils ziemlich unterschiedlich ausfällt. Liegt das daran,
dass die Güte total abhängig vom Randomizen des Netzes ist, oder woran liegt das?
Ja, das liegt dann wohl an der jeweiligen Zufallsinitialisierung. Das kann aber auch darauf hindeuten, dass die Daten mangelnde Qualität aufweisen und es somit sehr vom Zufall abhängt, wie sich die Qualität des Netzes während des Trainings ergibt.
Tuefftler wrote:2. habe zwar fast kein Wort von dem verstanden, was Du mir zur Verwendung der DLL geschrieben hast, aber werde versuchen mich einzufummeln.

Beschreibe doch bitte mal, was Du mit der DLL erreichen willst, vielleicht liegt hier ja einfach ein Missverständnis vor: Die DLL wird dazu verwendet, um neuronale Netze in eigene Anwendungen zu integrieren, ohne dass MemBrain selbst dazu laufen muss.

Viele Grüße
Thomas Jetter

Tuefftler
Posts: 25
Joined: Mon 9. Dec 2013, 19:40

Re: an unnamed file was not found

Post by Tuefftler » Mon 16. Dec 2013, 10:25

entfällt, da schon beantwortet
Last edited by Tuefftler on Mon 16. Dec 2013, 23:07, edited 1 time in total.

User avatar
TJetter
Posts: 306
Joined: Sat 13. Oct 2012, 12:04

Re: an unnamed file was not found

Post by TJetter » Mon 16. Dec 2013, 14:44

Genau diese Frage hatte ich doch oben auch schon beantwortet ?
Thomas Jetter

Tuefftler
Posts: 25
Joined: Mon 9. Dec 2013, 19:40

Re: an unnamed file was not found

Post by Tuefftler » Mon 16. Dec 2013, 23:06

Hallo Thomas,

ja, entschuldige, du hattest die Frage schon beantwortet, habe aber
jetzt erst gesehen, dass man auf eine Page2 umschalten kann - war mir zuvor nicht bewusst gewesen.

1.
Ja, also ich würde gerne ein (oder mehrere) trainiertes(/trainierte) Netz(/Netze) mit dem Metatrader verwenden, derart,
dass Metatrader die Inputs (High, Low, Open, Close, u.s.w.) an das jeweilige in der DLL vorhandene Netz übergibt
und den Output des Netzes aus der DLL dann wieder in Empfang nimmt. Über den Metatrader lassen sich für solche Zwecke DLLs einbinden.

2.
da die Verwendung der DLL mich schätzungsweise vor unüberwindliche Wissens- und Skill-Probleme führt, habe ich mir vorhin überlegt, ob man alternativ folgendes machen könnte:
man kann doch sicherlich das trainierte Netz in jeder beliebigen Programmiersprache nachbilden allein auf Grund der Zahlenwerte für jedes Neuron und für jeden Link,
die in der NeuralNetDef.c enthalten sind. Man könnte diese Zahlen des trainierten Netzes aus der NeuralNetDef.c extrahieren, in Arrays einlesen und für jeden Input-Vektor so miteinander verrechnen, dass
jeweils genau der Output rauskommt, gerade so als wenn man diesen Input-Vektor in Membrain selber ans Netz anlegen würde. Oder sehe ich das ganz falsch?

Viele Grüße
Harry

User avatar
TJetter
Posts: 306
Joined: Sat 13. Oct 2012, 12:04

Re: an unnamed file was not found

Post by TJetter » Tue 17. Dec 2013, 07:09

Tuefftler wrote:man kann doch sicherlich das trainierte Netz in jeder beliebigen Programmiersprache nachbilden allein auf Grund der Zahlenwerte für jedes Neuron und für jeden Link,
die in der NeuralNetDef.c enthalten sind. Man könnte diese Zahlen des trainierten Netzes aus der NeuralNetDef.c extrahieren, in Arrays einlesen und für jeden Input-Vektor so miteinander verrechnen, dass
jeweils genau der Output rauskommt, gerade so als wenn man diesen Input-Vektor in Membrain selber ans Netz anlegen würde. Oder sehe ich das ganz falsch?
Das ist natürlich grundsätzlich richtig, aber es bedeutet eben genau das: Über eine andere Programmiersprache einlesen und die Berechnung nachprogrammieren.
Was bringt das für einen Vorteil gegenüber der Verwendung der DLL? Letzteres ist garantiert weniger Aufwand, man muss sich nur die DLL-Anbindung unter MetaTrader anschauen, so kompliziert sollte das ja eigentlich nicht sein, oder?
Übrigens könnte man die Gewichte und Thresholds nicht nur aus der NeuralNetDef.c lesen, sondern auch aus dem CSV-Export des Netzes (in MemBrain über <File><Export>). Da kann ausgewählt werden, welche Elemente exportiert werden:
ExportSettings.jpg
(83.89 KiB) Not downloaded yet
Im Bild sind alle Elemente angehakt, die bei zeitinvarianten Netzen benötigt werden.
Ganz wichtig ist im Export die 'ID' der Neuronen, über diese ID werden die Verknüpfungen angegeben.

Viele Grüße
Thomas Jetter

Tuefftler
Posts: 25
Joined: Mon 9. Dec 2013, 19:40

Re: an unnamed file was not found

Post by Tuefftler » Tue 17. Dec 2013, 10:00

Hallo Thomas,

ok, vielen Dank für den Hinweis auf den CSV-Export.

Ja, das Dumme mit der DLL-Lösung ist nur, dass ich nicht einmal ansatzweise weiß, wie ich der Membraindll.dll beikommen könnte.
Daher meine Idee, dass es für mich wohl leichter wäre das trainierte Netz nachzubilden.

Falls Dich das Problem interessiert, habe ich Dir mal ein Metatrader-Script angehängt, das eine andere NeurtalNet-enthaltende
DLL ansteuert (ist kein Membrain-Netz). Dieses Netz funktioniert bei mir zwar in technischer Hinsicht, die Treffer-Quote kann man allerdings getrost vergessen.

Viele Grüße
Harry
Attachments
BPNN Predictor EURUSD.txt
ist eigentlich eine mq4-Datei, deren Dateinamenendung ich auf ".txt" geändert habe.
(9.49 KiB) Downloaded 200 times

User avatar
TJetter
Posts: 306
Joined: Sat 13. Oct 2012, 12:04

Re: an unnamed file was not found

Post by TJetter » Tue 17. Dec 2013, 12:39

Es sieht so aus, als ob man in MetaTrader eine DLL direkt importieren und dann auf deren Funktionen zugreifen kann.
In Deinem Beispiel steht oben die Zeile

Code: Select all

#import "BPNN_EURUSD.dll"
Analog dazu sollte das mit der MemBrain DLL funktionieren.

Weiter unten im Code scheinen DLL-Aufrufe zu passieren, z.B.:

Code: Select all

string status=Train(inpTrain,outTarget,outTrain,ntr,0,extInitWt,trainedWt,numLayers,lSz,AFT,0,nep,maxMSE);
oder auch

Code: Select all

status=Test(inpTest,outTest,1,extInitWt,numLayers,lSz,AFT,0);
Das scheinen Funktionen aus der DLL zu sein, die aufgerufen werden.
Die MemBrain DLL hat natürlich andere Funktionen, die anders verwendet werden (ähnlich zu den Funktionen in MemBrain Skripten).
Die Metatrader Skriptsprache scheint sehr C-ähnlich zu sein. Kennst Du Dich mit der Syntax aus? Wenn nicht, dann wird es ja ohnehin schwierig, eine Integration mit MetaTrader hinzubekommen, unabhängig davon, ob Dui die DLL nutzt, oder es direkt codierst, oder?

Außerdem scheint das Skript das NN auch aus MetaTrader heraus zu trainieren. Spätestens wenn Du das auch haben möchtest, wirst Du um die DLL nicht herum kommen.

Viele Grüße
Thomas Jetter

Tuefftler
Posts: 25
Joined: Mon 9. Dec 2013, 19:40

Re: an unnamed file was not found

Post by Tuefftler » Tue 17. Dec 2013, 15:23

ja, man kann in den Metatrader eine DLL importieren und auf deren Funktionen zugreifen.
Ja, das was man da sieht sind Funktionsaufrufe von Funktionen der DLL.

Ja, die Scriptsprache vom Metatrader 4 ist sehr C-ähnlich.

Ich habe schon eine Menge Scripte in dieser Scriptsprache geschrieben, allerdings noch nix mit DLLs.
Das Membrain-Netz, das ich verwenden will, wird offline, also sprich in Membrain, als Zeit-invariantes Netz trainiert.
Das Netz aus dem Beispiel, das ich Dir angehängt hatte, ist ein Zeit-variantes Netz und wird aus dem Metatrader heraus trainiert.

Das trainierte Membrain-Netz im Metatrader nachzubilden traue ich mir zu.

Mal nochmal zurück zur Membraindll.dll - wie bekomme ich dort ein trainiertes Netz rein?
DAs ist mir absolut unklar.

Und wie den Inputvektor aus dem Metatrader in die DLL?


Viele Grüße
Harry

User avatar
TJetter
Posts: 306
Joined: Sat 13. Oct 2012, 12:04

Re: an unnamed file was not found

Post by TJetter » Tue 17. Dec 2013, 16:49

Tuefftler wrote:ja, man kann in den Metatrader eine DLL importieren und auf deren Funktionen zugreifen.
Ja, das was man da sieht sind Funktionsaufrufe von Funktionen der DLL.

Ja, die Scriptsprache vom Metatrader 4 ist sehr C-ähnlich.

Ich habe schon eine Menge Scripte in dieser Scriptsprache geschrieben, allerdings noch nix mit DLLs.
Das Membrain-Netz, das ich verwenden will, wird offline, also sprich in Membrain, als Zeit-invariantes Netz trainiert.
Dann ist alles klar, und dann denke ich auch, dass Du unbeding die MemBrain DLL verwenden solltest. Hier die Funktionen aus der DLL, die Du benötigen wirst, es sind nicht viele. Du findest alle verfügbaren Funktionen im Header-File 'MemBrain_inc.h', welches im Unterverzeichnis 'DLL' Deiner MemBrain-Installation liegt.
1.) Neuronales Netz aus der angegebenen mbn-Datei laden:

Code: Select all

_MB_LoadNet(const char* pFileName); // Returns 0 on success, -1 on error

2.) Für alle Input-Neuronen die Eingangswerte anlegen, in einer Schleife beginnend mit index <0> bis <AnzahlInputs - 1>

Code: Select all

_MB_ApplyInputAct(_MB_INT idx, double act); // Returns 0 on success, -1 on error

3.) Einen Rechenschritt des Netzes ausführen:

Code: Select all

_MB_ThinkStep(void); // Does not have a return value
4.) Die Aktivitätswerte der Ausgangsneuronen zurücklesen (= Ergebnisse). Auch wieder in einer Schleife, beginnend bei index <0> bis <AnzahlOutputs - 1>

Code: Select all

_MB_GetOutputAct(_MB_INT idx, double* pAct); // Returns 0 on success, -1 on error
Mehr brauchst Du nicht. Natürlich gibt es in der DLL noch jede Menge hilfreiche Funktionen, z.B., um die Namen der Inputs und Outputs zu erhalten oder deren Anzahl. Wenn Dein Netz und Dein Script aber fest sind, dann kennst Du das alles ja schon im Voraus.
Bzgl. Zuordnung der Neuronen zu deren Indizes:
Lade Dein Netz in MemBrain und öffne den Lesson-Editor. Klicke dann im Lesson-Editor auf 'Names From Net'.
Die Reihenfolge der Inputs bzw. Outputs, die Du nun im LE siehst, entspricht genau den aufsteigenden Indizes, für Inputs und Outputs jeweils getrennt und bei 0 beginnend. So kannst Du diese also in der DLL ansprechen (siehe Funktionen oben, die mit Indizes arbeiten). Als Hilfestellung am besten aus dem LE in ein CSV exportieren, dann in Excel importieren und Indizes in die Zeile darunter eintragen.

Klärt das Deine Fragen?

Viele Grüße
Thomas Jetter

Post Reply