"New Neural" ist ein Open-Source-Projekt für neuronale Netzwerke für die MetaTrader 5-Plattform. - Seite 72

 
Urain:

und vor allem den Quellcode, wie diese Architektur entstanden ist.

Handelt es sich bei den beiden Eingängen um die Werte eines Indikators oder werden die Daten von einem externen Programm eingegeben?

 
yu-sha:

Handelt es sich bei den beiden Eingängen um die Werte eines Indikators oder werden die Daten von einer externen Stelle geliefert?

Externe Daten, wie z. B. die Ausgabe, können nach Belieben angezeigt oder ausgeschlossen werden.

ZS das ist eine Zeichnung aus einer XOR-Aufgabe, eine klassische MLP

 
Urain:

Jetzt kam mir ein verirrter Gedanke:

Vielleicht sollte man die MQ APIbitten , Tasks für den Cluster zu setzen?

die Aufgabe direkt von MQL5 aus unter Umgehung des Prüfers zu verteilen. Die Aufgabe ist sicherlich komplex, es müssen viele Kontrollen durchgeführt werden, aber sie ist überschaubar.

Denken Sie, Brüder, ist nicht zu hoch fegen? Cluster sicherlich heilige Kuh, aber wir haben hart zu arbeiten.


Das wäre sehr cool! Es stellt sich jedoch die Frage, wie die Agenten in diesem Fall entlohnt werden.

 

Wie wäre es damit?

Ansonsten ist die Bedeutung der Neuronen 1, 2 und 8 unklar

 
yu-sha:

Wie wäre es damit?

Ansonsten ist die Bedeutung der Neuronen 1 und 2 unklar

Nun, das könnte man tun, aber darum geht es nicht.
 

Erste Xml-Datei: Netzwerk vor der Vorverarbeitung -UrainTaskPre.xml

Wenn es viele Neuronen desselben Typs gibt, kann man leicht einen Fehler machen - hier geben wir eine Vorlage an, und der Präprozessor sollte sie in eine fertige Netzwerkdatei erweitern

<ROOT>

    <NET>

                <LAYER CLASS="EXTERN" NAME="INPUT">
                        <NEURON NAME="NEURON:%ID%.INPUT" VALUE="0.0">
                                <REPEAT FOR="%ID%" FROM="1" TO="2"/>
                        </NEURON>
                </LAYER>

                <LAYER CLASS="TANH" NAME="HID:0">
                        <NEURON NAME="NEURON:%ID%.HID:0" BIAS="0.0">
                                <REPEAT FOR="%ID%" FROM="1" TO="2"/>
                                <LINK TO="expr:.+\.INPUT$" WEIGHT="0.0"/>
                        </NEURON>
                </LAYER>

                <LAYER CLASS="TANH" NAME="OUT">
                        <NEURON NAME="OUT" BIAS="0.0">
                                <LINK TO="expr:.+\.HID:0$" WEIGHT="0.0"/>
                        </NEURON>
                </LAYER>

    </NET>

</ROOT>

Außerdem verarbeitet der Präprozessor die Ersetzungen <REPEAT .../>, <INCLUDE .../>, "expr:..." und wir erhalten das Netz

UrainTaskPost.xml

<ROOT>
    <NET>
        <LAYER CLASS="EXTERN" NAME="INPUT">
            <NEURON NAME="NEURON:1.INPUT" VALUE="0.0" />
            <NEURON NAME="NEURON:2.INPUT" VALUE="0.0" />
        </LAYER>
        <LAYER CLASS="TANH" NAME="HID:0">
            <NEURON NAME="NEURON:1.HID:0" BIAS="0.0">
                <LINK TO="NEURON:1.INPUT" WEIGHT="0.0" />
                <LINK TO="NEURON:2.INPUT" WEIGHT="0.0" />
            </NEURON>
            <NEURON NAME="NEURON:2.HID:0" BIAS="0.0">
                <LINK TO="NEURON:1.INPUT" WEIGHT="0.0" />
                <LINK TO="NEURON:2.INPUT" WEIGHT="0.0" />
            </NEURON>
        </LAYER>
        <LAYER CLASS="TANH" NAME="OUT">
            <NEURON NAME="OUT" BIAS="0.0">
                <LINK TO="NEURON:1.HID:0" WEIGHT="0.0" />
                <LINK TO="NEURON:2.HID:0" WEIGHT="0.0" />
            </NEURON>
        </LAYER>
    </NET>
</ROOT>

Nachfolgend ein Skript, das eine XML-Datei öffnet, sie in einen XML-Baum parst, daraus ein neuronales Netz erstellt, die Eingaben initialisiert und hier Run()

//+------------------------------------------------------------------+
//|                                                  UrainScript.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

#include <Cuda\Base.mqh>

CXmlDocument xmlDoc;

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
    string err;
    
    // Создаем дерево XML
    if (xmlDoc.CreateFromFile("UrainTaskPost.xml",err))
    {
      Print ("Root:",xmlDoc.FDocumentElement.GetName());
      CXmlElement * xmlNet = xmlDoc.FDocumentElement.GetChild(0);

      // Печатаем вложенные уровни
      for (int j=0; j<xmlNet.GetChildCount(); j++)
      {
        CXmlElement * xmlLayer = xmlNet.GetChild(j);
        Print ("Element #",j,", CLASS=",xmlLayer.GetAttributeValue("CLASS"),", NAME=",xmlLayer.GetAttributeValue("NAME"));
      }
      
      // Строим нейросеть из дерева XML
      CNet net;
      if (net.LoadFrom(xmlNet))
      {
        ((CNeuronService*)(net.GetNeuron("NEURON:1.INPUT"))).SetValue(0.1234 f);
        ((CNeuronService*)(net.GetNeuron("NEURON:2.INPUT"))).SetValue(0.1234 f);
        net.Run();
        Print ("OUT=",net.GetNeuron("OUT").GetValue());
      }
    }
   
  }
//+------------------------------------------------------------------+

Anmerkung:

Die Klasse CNeuronService behandelt Neuronen des Typs "EXTERN" - eine kleine Inkonsistenz aus alten Zeiten ist geblieben

Es ist einfacher, sich daran zu gewöhnen, als es zu reparieren ))))

Ergebnisse des Drehbuchs:


UrainTaskPost.xml muss in einem gemeinsamen Terminal-Ordner abgelegt werden, z. B. C:\Dokumente und Einstellungen\Alle Benutzer\Anwendungsdaten\MetaQuotes\Terminal\Common\Files

Dateien aus dem Archiv nach MQL5\Include

Dateien:
 
yu-sha:

Erste Xml-Datei: Netzwerk vor der Vorverarbeitung -UrainTaskPre.xml

Wenn es viele Neuronen desselben Typs gibt, kann man leicht einen Fehler machen - hier geben wir eine Vorlage an und der Präprozessor sollte sie in eine fertige Netzwerkdatei umwandeln

Außerdem verarbeitet der Präprozessor die <REPEAT .../>-Ersetzungen und wir erhalten das Netz

UrainTaskPost.xml

Das folgende Skript öffnet eine XML-Datei, parst sie in einen XML-Baum, erstellt daraus ein neuronales Netz, initialisiert die Eingaben und führt die Funktion Run() aus

Es wird wärmer, erklären Sie nun, wie die Datei zu interpretieren ist.

Wo man was schreibt, um Links zu erstellen, oder wo man herumstochert, wenn es heißt, dass sie gesetzt sind.

 
Urain:

Es wird wärmer, erklären Sie jetzt, wie die Datei zu interpretieren ist.

Schreiben Sie, wo Sie die Verbindungen herstellen wollen, oder geben Sie einen Hinweis darauf, wo sie festgelegt sind.

1) Jedes Neuron muss einen eindeutigen Namen haben, z. B. NEURON:1.HID:0

Der Name zeigt an, dass es sich um das 1. Neuron der Schicht HID:0 handelt.

2) Die Links verwenden die Neuronennamen + Gewichte zur Adressierung

3) Jede Neuronenklasse kann (und muss) das virtuelle bool Init (CXmlElement *aXmlElement, CNet *aNet) überschreiben und entsprechend ihren Parameteranforderungen aus dem XML-Element laden

P.S.

XML-Dateien lassen sich besser mit Notepad als mit Excel bearbeiten ))

 
yu-sha:

1) Jedes Neuron muss einen eindeutigen Namen haben, z. B. NEURON:1.HID:0

Der Name besagt, dass es sich um das 1. Neuron der Schicht HID:0 handelt.

2) Links verwenden die Neuronennamen + Gewichte zur Adressierung

3) Jede Neuronenklasse kann (und muss) das virtuelle bool Init (CXmlElement *aXmlElement, CNet *aNet) überschreiben und entsprechend ihrer Parameteranforderungen aus dem XML-Element laden

P.S.

XML-Dateien lassen sich besser mit Notepad als mit Excel bearbeiten ))

Ja, ich kann sie sowohl mit Excel als auch mit Word und Notepad bearbeiten, aber es ist nicht offensichtlich - es sind zwei Neuronen, und es werden 200-2000 sein, und jede wird 100-200 Links haben.

Wenn ich schon daran herumfummeln muss, möchte ich, dass es grafisch nützlich ist oder angezeigt wird, und noch besser, dass es grafisch bearbeitbar ist.

Wenn man etwas tun will, sollte es bequemer sein als so: Spalten, woher man es bekommt, Zeilen, wohin man es verteilt

[количество слоёв] 3
[тип 0 слоя]input[количество нейронов 0 слой]2
[тип 1 слоя]mlp  [количество нейронов 1 слой]2
[тип 2 слоя]mlp  [количество нейронов 2 слой]1
   0 1 2 3 4
 -----------
0| 0 0 1 1 0
1| 0 0 1 1 0
2| 0 0 0 0 1
3| 0 0 0 0 1
4| 0 0 0 0 0
 
Urain:

Ich habe sowohl Excel als auch Word und Notepad benutzt, aber es ist nicht offensichtlich, es ist ein Durcheinander, es sind zwei Neuronen und es werden 200-2000 sein und jedes wird 100-200 Verbindungen haben.

Wenn ich schon daran herumfummeln muss, dann möchte ich, dass es grafisch einfach zu benutzen oder anzuzeigen ist, oder, noch besser, grafisch zu bearbeiten.

Dafür ist der PreProcessor gedacht.

Ob Sie nun 2 Neuronen oder 100 haben, die Dateigröße ist die gleiche.

Und wenn Sie grafisch editieren wollen, stört Sie niemand, schreiben Sie einfach eine GUI und verwenden Sie

Grund der Beschwerde: