"新神经 "是MetaTrader 5平台的一个开源神经网络引擎项目。 - 页 72

 
Urain

以及最重要的是关于这个架构是如何创建的源代码。

这两个输入是某些指标的值还是由外部人员提供的数据?

 
yu-sha:

这两个输入是一个指标的值还是由外部人员提供的数据?

外部数据,如输出,可以根据需要显示或排除。

ZS 这是一张来自XOR任务的图纸,经典的MLP

 
Urain

现在我想到了一个游离的想法。

也许可以要求MQ API为集群设置任务

直接从MQL5分发任务,绕过测试人员。这项任务当然很复杂,有很多检查要设置,但它是可控的。

你觉得兄弟们,是不是扫得太高了?"集群肯定是神牛,但我们要努力。


这将是非常酷的!但 问题是,在这种情况下,代理人将如何获得报酬?

 

这个怎么样?

否则神经元1、2和8的含义就不清楚了

 
yu-sha:

这个怎么样?

否则神经元1和2的含义就不清楚了

嗯,你可以这样做,这并不重要。
 

第一个xml-文件:预处理前的网络 -UrainTaskPre.xml

当有许多相同类型的神经元时,很容易出错--这里我们指定一个模板,预处理器应将其解包为一个现成的网络文件。

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

此外,预处理程序还处理了<REPEAT .../>, <INCLUDE .../>, "expr:... "等 替换 我们得到了网络

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>

下面是一个脚本,它打开一个XML文件,将其解析为XML树,从中创建一个神经网络,初始化输入,这里是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());
      }
    }
   
  }
//+------------------------------------------------------------------+

请注意。

类CNeuronService处理 "EXTERN "类型的神经元--从以前开始留下了一点不一致的地方。

习惯于它比修复它更容易))))。

脚本的结果。


UrainTaskPost.xml必须放在一个公共终端文件夹 中,例如C:\Documents and Settings\All Users\Application Data\MetaQuotes\Terminal\Common\Files。

从归档文件到MQL5/Include的文件

附加的文件:
 
yu-sha:

第一个xml-文件:预处理前的网络 -UrainTaskPre.xml

当有许多相同类型的神经元时,很容易出错--这里我们指定一个模板,预处理器应将其扩展为一个现成的网络文件。

进一步,预处理器处理<REPEAT .../>的替换,我们得到了网络

UrainTaskPost.xml

下面是一个脚本,它打开一个XML文件,将其解析为XML树,从中创建一个神经网络,初始化输入,然后运行()。

越来越暖和,现在解释一下如何解释这个文件。

在哪里写什么创建链接,或在它说设置的地方打探一下。

 
Urain

天气变暖了,现在解释一下如何解释这个文件。

在哪里写上什么进行连接,或者在哪里提示说是设置的。

1) 每个神经元必须有一个唯一的名字,例如:NEURON:1.HID:0

该名称表明它是第1层的神经元 HID:0

2) 链接使用神经元名称+权重进行寻址

3) 每个神经元类可以(而且必须)覆盖虚拟的bool Init(CXmlElement *aXmlElement, CNet *aNet),并根据其参数要求从XML元素中加载。

P.S.

XML文件用记事本编辑比用Excel编辑好))

 
yu-sha:

1) 每个神经元必须有一个唯一的名字,例如:NEURON:1.HID:0

这个名字意味着它是HID:0层的第一个神经元。

2) 链接使用神经元名称+权重进行寻址

3) 每个神经元类可以(而且必须)覆盖虚拟的bool Init(CXmlElement *aXmlElement, CNet *aNet),并根据其参数要求从XML元素中加载。

P.S.

XML文件用记事本编辑比用Excel编辑好))

是的,我可以用Excel和Word以及记事本进行编辑,但这并不明显--这是两个神经元,会有200-2000个,每一个都会有100-200个链接。

如果我不得不摆弄它,我希望它在图形上是有用的或显示的,甚至更好的是,在图形上可编辑。

如果你要做什么,应该比这更方便:你从哪里得到它的列,你把它分配到哪里的行

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

我既用了Excel,也用了Word和记事本,但不明显,很乱,是两个神经元,会有200-2000个,每个会有100-200个连接。

如果我不得不摆弄它,我希望它在图形上易于使用或显示,或者更好的是,以图形方式编辑。

这就是PreProcessor的作用。

无论你有2个神经元还是100个神经元,文件大小 都是一样的。

如果你想用图形方式编辑,没有人打扰你,只要写一个GUI并使用