"New Neural" est un projet de moteur de réseau neuronal Open Source pour la plateforme MetaTrader 5. - page 72

 
Urain:

et surtout le code source de la création de cette architecture.

Est-ce que les deux entrées sont les valeurs d'un indicateur ou est-ce que quelqu'un d'externe va fournir les données ?

 
yu-sha:

Les deux entrées sont-elles les valeurs d'un indicateur ou quelqu'un d'externe fournira-t-il les données ?

Les données externes, comme la sortie, peuvent être affichées ou exclues à volonté.

ZS c'est un dessin d'une tâche XOR, classique MLP

 
Urain:

Maintenant, une pensée perdue m'a traversé l'esprit :

Peut-être faut-il demander à l' APIMQ de définir des tâches pour le cluster?

pour distribuer la tâche directement depuis MQL5, en contournant le testeur. La tâche est certes complexe, il y a beaucoup de contrôles à effectuer, mais elle est gérable.

Pensez-vous frères, n'est pas trop élevé balayage ? cluster certainement vache sacrée, mais nous devons travailler dur.


Ce serait très cool ! Mais la question serait de savoir comment les agents seraient rémunérés dans ce cas ?

 

Que pensez-vous de ça ?

Sinon, la signification des neurones 1, 2 et 8 n'est pas claire.

 
yu-sha:

Que pensez-vous de ça ?

Sinon, la signification des neurones 1 et 2 n'est pas claire.

Vous pourriez le faire, mais ce n'est pas la question.
 

Premier fichier xml : réseau avant prétraitement -UrainTaskPre.xml

Quand il y a beaucoup de neurones du même type, il est facile de faire une erreur - ici, nous spécifions un modèle et le préprocesseur doit le développer en un fichier réseau prêt à l'emploi.

<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>

De plus, le préprocesseur gère les substitutions <REPEAT .../>, <INCLUDE .../>, "expr :..." et nous obtenons le réseau

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>

Voici un script qui ouvre un fichier XML, l'analyse en un arbre XML, crée un réseau neuronal à partir de celui-ci, initialise les entrées et le voici 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());
      }
    }
   
  }
//+------------------------------------------------------------------+

Note :

la classe CNeuronService gère les neurones de type "EXTERN" - il reste une petite incohérence d'autrefois

Il est plus facile de s'y habituer que de le réparer. ))))

Résultats du scénario :


UrainTaskPost.xml doit être placé dans un dossier commun du terminal, par exemple C:³ Documents and Settings ³ All Users ³ Application Data ³ MetaQuotes ³ Terminal ³ Common ³ Files.

Fichiers de l'archive vers MQL5\Include

Dossiers :
 
yu-sha:

Premier fichier xml : réseau avant prétraitement -UrainTaskPre.xml

Quand il y a beaucoup de neurones du même type, il est facile de faire une erreur - ici, nous spécifions un modèle et le préprocesseur doit le développer en un fichier réseau prêt à l'emploi.

Le préprocesseur traite ensuite les substitutions <REPEAT .../> et nous obtenons le réseau

UrainTaskPost.xml

Voici un script qui ouvre un fichier XML, l'analyse en un arbre XML, crée un réseau neuronal à partir de celui-ci, initialise les entrées et exécute Run().

En se réchauffant, on explique maintenant comment interpréter le fichier.

Où écrire quoi pour créer les liens, ou fouiller là où il est dit qu'ils sont placés.

 
Urain:

Il commence à faire plus chaud, maintenant explique comment interpréter le fichier.

Où écrire ce qu'il faut pour établir les connexions, ou donner un indice là où il est dit qu'elles sont établies.

1) Chaque neurone doit avoir un nom unique, par exemple NEURON:1.HID:0

Le nom indique qu'il s'agit du 1er neurone de la couche HID:0

2) Les liens utilisent les noms des neurones + les poids pour l'adressage.

3) Chaque classe de neurones peut (et doit) surcharger le bool virtuel Init (CXmlElement *aXmlElement, CNet *aNet) et charger l'élément XML en fonction de ses exigences en matière de paramètres

P.S.

Les fichiers XML sont plus faciles à modifier avec Notepad qu'avec Excel ;))

 
yu-sha:

1) Chaque neurone doit avoir un nom unique, par exemple : NEURON:1.HID:0

Le nom indique qu'il s'agit du 1er neurone de la couche HID:0

2) Les liens utilisent les noms des neurones + les poids pour l'adressage.

3) Chaque classe de neurones peut (et doit) surcharger le bool virtuel Init (CXmlElement *aXmlElement, CNet *aNet) et charger l'élément XML en fonction de ses exigences en matière de paramètres

P.S.

Les fichiers XML sont plus faciles à modifier avec Notepad qu'avec Excel ;))

Oui, je peux l'éditer à la fois avec Excel et Word et Notepad, mais ce n'est pas évident - il s'agit de deux neurones, et il y aura 200-2000, et chacun aura 100-200 liens.

Si je dois le manipuler, je veux qu'il soit graphiquement utile ou affichable, et encore mieux, graphiquement modifiable.

si vous devez faire quelque chose, cela devrait être plus pratique que cela : colonnes d'où vous le prenez, lignes où vous le distribuez...

[количество слоёв] 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:

J'ai utilisé à la fois Excel et Word et le bloc-notes, mais ce n'est pas évident, c'est un fouillis, il s'agit de deux neurones et il y aura 200-2000 et chacun aura 100-200 connexions.

Si je dois le manipuler, je veux qu'il soit graphiquement facile à utiliser ou à afficher, ou, mieux encore, à modifier graphiquement.

C'est à ça que sert le PreProcessor.

Que vous ayez 2 neurones ou 100, la taille du fichier est la même.

Et si vous voulez éditer graphiquement, personne ne vous dérange, écrivez simplement une interface graphique et utilisez

Raison: