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

 
雷纳特

没有 "安全系统 "DLLs。

我不坚持:)没有所以没有。
 

我建议用递归代替循环来制作一个通用网络。建立网络的全部意义在于创建一个拓扑图。

拓扑图是一个二维表,上面写着哪个点与哪个点相连。使用这样的图,人们可以写出经典的拓扑结构,或者在图形拓扑编辑器的帮助下创建自己的拓扑。

解释代码的图表 第12页

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class Mem
  {
   double            m;
public:
                     Mem(void){};
                    ~Mem(void){};
   void              set(double m_){m=m_;};
   double            get(){return(m);};
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class ObjMem
  {
public:
   ObjMem           *prev;// предыдущий
   Mem              *obj; // объект памяти
   ObjMem           *next;// последующий
   ObjMem           *side;// боковой
                     ObjMem(void){obj=new Mem();};
                    ~ObjMem(void){delete obj;};
   void              ListPrev(ObjMem *obj){prev=obj;};
   void              ListNext(ObjMem *obj){next=obj;};
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class NeuroBase
  {
public:
   ObjMem           *in[];// входы
   ObjMem           *wg[];// веса
   ObjMem           *zo[];// задержка
   Mem              *ou;  // выход
                     NeuroBase(void){ou=new Mem();};
                    ~NeuroBase(void){delete ou;};
   void              ExportMem_In(Mem *ex,int i){in[i].obj=ex;};
   void              ExportMem_Wg(Mem *ex,int i){wg[i].obj=ex;};
   void              ExportMem_Zo(Mem *ex){zo[0].obj=ex;};
   Mem              *ImportMem_In(int i){return(in[i].obj);};
   Mem              *ImportMem_Wg(int i){return(wg[i].obj);};
   Mem              *ImportMem_Zo(int i){return(zo[i].obj);};
   virtual void      work(){/* вызов суммирования перемноженных пар*/};
   virtual void      training(){/* вызов расчёта ошибки*/};
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class Net
  {
   NeuroBase        *n[];
public:
                     Net(void){};
                    ~Net(void){};
   void              direct();  // прямой ход
   void              revers();  // обратный ход
   void              topology();// создание топологии
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Net::topology()
  {
/*    создаём массив нейронов
      связываем массив в список
      создаём связные списки нейновесов и боковые пары
      создаём связывание входов и выходов
      создаём связывание входов и операторов задержки (если нужно)
      связывем веса нейронов с внешним массивом
      связываем выходы последнего слоя с внешним массивом
      связываем входы первогого слоя с внешним массивом      
   */
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Net::direct()
  {
//  вызов расчёта нейронов от первого до последнего
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Net::revers()
  {
//  вызов расчёта нейронов от последнего до  первого
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
 

链接到神经元内的列表,神经元和链接输入和输出避免了创建学习算法的问题(以及工作流程问题),网络本身会知道在哪里分配什么。

 
雷纳特
顺便说一下,我强烈反对你的内部命名和编码标准。
 
TheXpert
顺便说一下,我强烈反对你的内部命名和编码标准。

这里没有选择。每个人都有自己的标准和既定原则(我的也和元老级的引文不同)。

但元引号标准并不是现有的最差的。因此,为了确保没有人因为他们的损失而受到伤害,我们将不得不使用一个单一的标准。在这种情况下,它将是来自元引号。

 
sergeev: 在这种情况下,它将是来自元引号。
我可以张贴我的;)?
 
Urain

我建议用递归代替循环来制作一个通用网络。建立网络的全部意义在于创建一个拓扑图。

拓扑图是一个二维表,上面写着哪个点与哪个点相连。使用这样的图,将有可能写出经典的拓扑结构,或使用图形化的拓扑编辑器创建自己的拓扑。

二维阵列是否足以满足各种拓扑结构和视觉理解?

 
sergeev:

一个二维阵列是否足以满足各种拓扑结构和视觉理解?

不。
 
sergeev:

二维阵列是否足以满足各种拓扑结构和视觉理解?


对于拓扑结构的加密来说,是的,对于视觉理解来说,只有专家才能做到,最好是一个图形内核,它能从视觉感知中正确地做出一个地图。

从本质上讲,地图是一个由 "从哪里来 "和 "到哪里去 "两个单元组成的一维数组结构,加上地图头应该包含多少个神经元、每个神经元有什么类型、哪个神经元有多少权重、什么延迟运算符等级等信息。

所以为了充分的视觉理解二维是不够的,最好有一个二维的结构数组,这样你就可以写下每个输入的类型、权重、运算符的延迟等级和连接,以及来自延迟单元的链接。

一般来说,"和来自延迟单元的链接 "是不必要的,它们与输入相连,这样输入的链接也会存储有延迟的链接信息。

 
谁能给我提供一个在线绘图工具的建议,用于绘制图表和狗屎?