"Новый нейронный" - проект Open Source движка нейронной сети для платформы MetaTrader 5. - страница 5

 
Renat:

Нет никаких "безопасных системных" DLL.

Я не настаиваю :) нет так нет.
 

Предлагаю сделать универсальную сеть с рекурсией вместо циклов. Вся суть построения сети заключается в создании карты топологии.

Карта топологии это двумерная таблица где прописано какая точка с какой связана. Используя такую схему можно будет прописать классические топологии или создать свою с помощью графического редактора топологий.

Каритнка поясняющая код стр.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()
  {
//  вызов расчёта нейронов от последнего до  первого
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
 

Связывание в списки внутри нейрона, нейронов и связи входов и выходов позволяют избежать проблем создания алгоритмов обучения (равно как и проблем рабочего хода), сеть сама будет знать куда чего присвоить.

 
Renat:
Кстати я сильно против вашего внутреннего стандарта именования и кодирования.
 
TheXpert:
Кстати я сильно против вашего внутреннего стандарта именования и кодирования.

тут нет выбора. У всех свои стандарты и устоявшиеся принципы (у меня тоже отличается от метаквотов).

Но стандарт метаквотов не самый плохой из имеющихся. Поэтому чтоб ни кому не было обидно за свою потерю, прийдется использовать единый стандарт. В данной ситуации он будет от метаквотов.

 
sergeev: В данной ситуации он будет от метаквотов.
Я могу свой выложить ;)?
 
Urain:

Предлагаю сделать универсальную сеть с рекурсией вместо циклов. Вся суть построения сети заключается в создании карты топологии.

Карта топологии это двумерная таблица где прописано какая точка с какой связана. Используя такую схему можно будет прописать классические топологии или создать свою с помощью графического редактора топологий.

Двумерного массива будет достаточно для разнообразных топологии и наглядного понимания?

 
sergeev:

Двумерного массива будет достаточно для разнообразных топологии и наглядного понимания?

нет.
 
sergeev:

Двумерного массива будет достаточно для разнообразных топологии и наглядного понимания?


Для шифрования топологии да, для наглядного понимания только для специалистов, всё же лучше графическое ядро которое будет из визуального восприятия правильно составлять карту.

По сути карта это одномерный массив  структур, которые состоят из двух ячеек "откуда" и "куда", плюс в шапке карты должна быть инфа сколько нейронов, какой тип у каждого нейрона, сколько весов у какого нейрона, какой ранг оператора задержки.

Так что для полного наглядного понимания двумерного мало, лучше двумерный массив структур, чтоб было куда записать тип, количество весов, ранг оператора задержки и связь каждого входа, и связи от ячеек задержки.

ЗЫ вообще то "и связи от ячеек задержки" это лишнее, они же соеденены со входами так что в связях входов хранится инфа и о связях с задержками.

 
Кто посоветует какую-нить онлайн-рисовалку схем и т.п. хрени?