"New Neural" è un progetto di motore di rete neurale Open Source per la piattaforma MetaTrader 5. - pagina 5

 
Renat:

Non ci sono DLL di "sistema sicuro".

Non insisto :) no quindi no.
 

Propongo di fare una rete universale con ricorsione al posto dei loop. Lo scopo di costruire una rete è quello di creare una mappa topologica.

La mappa topologica è una tabella bidimensionale in cui è scritto quale punto è collegato a quale. Utilizzando un tale diagramma si possono scrivere topologie classiche o creare le proprie con l'aiuto di un editor grafico di topologia.

Figura che spiega il codice 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()
  {
//  вызов расчёта нейронов от последнего до  первого
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
 

Collegare in liste all'interno di un neurone, neuroni e collegare ingressi e uscite evita i problemi di creazione di algoritmi di apprendimento (così come i problemi di flusso di lavoro), la rete stessa saprà dove assegnare cosa.

 
Renat:
A proposito, sono fortemente contrario al vostro standard interno di denominazione e codifica.
 
TheXpert:
A proposito, sono fortemente contrario al vostro standard interno di denominazione e codifica.

Non c'è scelta qui. Ognuno ha i propri standard e principi stabiliti (anch'io ho diverse meta-citazioni).

Ma lo standard delle meta-citazioni non è il peggiore disponibile. Quindi, per essere sicuri che nessuno si faccia male per la sua perdita, dovremo usare un unico standard. In questa situazione sarà dalle meta-citazioni.

 
sergeev: In questa situazione sarebbe dalle meta-citazioni.
Posso postare il mio ;)?
 
Urain:

Propongo di fare una rete universale con ricorsione al posto dei loop. Lo scopo di costruire una rete è quello di creare una mappa topologica.

La mappa topologica è una tabella bidimensionale in cui è scritto quale punto è collegato a quale. Utilizzando tale diagramma sarà possibile scrivere le topologie classiche o creare le proprie utilizzando un editor grafico di topologia.

Un array bidimensionale sarà sufficiente per una varietà di topologie e di comprensione visiva?

 
sergeev:

Un array bidimensionale sarebbe sufficiente per una varietà di topologie e per la comprensione visiva?

no.
 
sergeev:

Un array bidimensionale sarà sufficiente per una varietà di topologie e di comprensione visiva?


Per la codifica della topologia sì, per la comprensione visiva solo per gli specialisti, ancora meglio un kernel grafico che dalla percezione visiva farà correttamente una mappa.

Essenzialmente, la mappa è un array unidimensionale di strutture che consistono in due celle "where from" e "where to", più l'intestazione della mappa dovrebbe contenere informazioni su quanti neuroni, che tipo ha ogni neurone, quanti pesi ha il neurone, quale rango di operatore di ritardo.

Quindi per una piena comprensione visiva bidimensionale non è sufficiente, meglio avere un array bidimensionale di strutture, in modo da poter scrivere il tipo, il numero di pesi, il grado di ritardo dell'operatore e la connessione di ogni ingresso, e i collegamenti dalle celle di ritardo.

In generale, "e i collegamenti dalle celle di ritardo" non è necessario, sono collegati agli ingressi in modo che i collegamenti degli ingressi memorizzino anche le informazioni sui collegamenti con ritardi.

 
Chi può consigliarmi uno strumento di disegno online per diagrammi e roba simile?