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

 
Renat:

Il n'y a pas de DLL "système sûr".

Je n'insiste pas :) non, donc non.
 

Je propose de faire un réseau universel avec une récursion au lieu de boucles. Le but de la construction d'un réseau est de créer une carte topologique.

La carte topologique est un tableau à deux dimensions où l'on précise quel point est relié à quel autre. En utilisant un tel diagramme, on peut écrire des topologies classiques ou créer ses propres topologies à l'aide d'un éditeur de topologie graphique.

Figure expliquant le code p.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()
  {
//  вызов расчёта нейронов от последнего до  первого
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
 

Le fait de créer des listes au sein d'un neurone, de neurones et de relier les entrées et les sorties évite les problèmes de création d'algorithmes d'apprentissage (ainsi que les problèmes de flux de travail), le réseau lui-même saura où attribuer quoi.

 
Renat:
Au fait, je m'oppose fermement à votre norme interne de dénomination et de codage.
 
LeXpert:
D'ailleurs, je m'oppose fermement à votre norme interne de dénomination et de codage.

il n'y a pas de choix ici. Chacun a ses propres normes et principes établis (les miens sont également différents des méta-citations).

Mais la norme des métacitations n'est pas la pire qui soit. Donc, pour s'assurer que personne ne soit lésé pour sa perte, nous devrons utiliser une norme unique. Dans ce cas, il s'agira des métacitations.

 
sergeev: Dans cette situation, ce serait à partir des méta-citations.
Je peux poster le mien ;) ?
 
Urain:

Je propose de faire un réseau universel avec une récursion au lieu de boucles. Le but de la construction d'un réseau est de créer une carte topologique.

La carte topologique est un tableau à deux dimensions où l'on précise quel point est relié à quel autre. À l'aide d'un tel diagramme, il sera possible d'écrire les topologies classiques ou de créer les vôtres en utilisant un éditeur de topologie graphique.

Un réseau bidimensionnel sera-t-il suffisant pour une variété de topologies et de compréhension visuelle ?

 
sergeev:

Un réseau bidimensionnel serait-il suffisant pour une variété de topologies et de compréhension visuelle ?

non.
 
sergeev:

Un réseau bidimensionnel sera-t-il suffisant pour une variété de topologies et de compréhension visuelle ?


Pour le cryptage de la topologie oui, pour la compréhension visuelle seulement pour les spécialistes, encore mieux un noyau graphique qui à partir de la perception visuelle fera correctement une carte.

Essentiellement, la carte est un tableau unidimensionnel de structures qui se compose de deux cellules "où de" et "où à", plus l'en-tête de la carte devrait contenir des informations sur le nombre de neurones, le type de chaque neurone, le nombre de poids de chaque neurone, le rang de l'opérateur de retard.

Ainsi, pour une compréhension visuelle complète, un tableau bidimensionnel n'est pas suffisant. Il est préférable d'avoir un tableau bidimensionnel de structures, afin de pouvoir écrire le type, le nombre de poids, le rang de retard de l'opérateur et la connexion de chaque entrée, ainsi que les liens des cellules de retard.

En général, "et les liens des cellules de retard" est inutile, ils sont connectés aux entrées de sorte que les liens des entrées stockent également des informations sur les liens avec des retards.

 
Qui peut me conseiller un outil de dessin en ligne pour les diagrammes et les trucs ?