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

 
joo:
Попробую до него достучатся - пропадает надолго. Статью, бы конечно иметь по теме OpenCL with MQL5 было бы очень хорошо. Особенно сейчас.

Как успехи? JavaDev больше месяца в скайпе на связь не выходит.

Это кусок кода от него, демонстрирующий работу   OpenCL

[05.06.2011 17:29:59] JavaDev:    __kernel void MFractal(                           \r\n"
"                        float x0,                    \r\n"
"                        float y0,                    \r\n"
"                        float x1,                    \r\n"
"                        float y1,                    \r\n"
"                        uint  max,                   \r\n"
"         __global       uint *out)                   \r\n"
"     {//------------------------------------------   \r\n"
"         size_t  w = get_global_size(0);             \r\n"
"         size_t  h = get_global_size(1);             \r\n"
"         size_t gx = get_global_id(0);               \r\n"
"         size_t gy = get_global_id(1);               \r\n"


"         float dx = x0 + gx * (x1-x0) / (float) w;           \r\n"
"         float dy = y0 + gy * (y1-y0) / (float)h;           \r\n"

"         float x  = 0;                               \r\n"
"         float y  = 0;                               \r\n"
"         float xx = 0;                               \r\n"
"         float yy = 0;                               \r\n"
"         float xy = 0;                               \r\n"

"         uint i = 0;                                  \r\n"
"         while ((xx+yy)<4 && i<max) {                \r\n"
"            xx = x*x;                                \r\n"
"            yy = y*y;                                \r\n"
"            xy = x*y;                                \r\n"
"            y = xy+xy+dy;                            \r\n"
"            x = xx-yy+dx;                            \r\n"
"            i++;                                     \r\n"
"      }                                              \r\n"

"      if (i == max) {                                \r\n"
"         out[w*gy+gx] = 0;                           \r\n"
"      } else {                                       \r\n"
"        out[w*gy+gx] = (uint)((float)0xFFFFFF/(float)max)*i;                \r\n"
"    }                                               \r\n"
"   }//--------------------------------------------   \r\n"

 

   int calcOCL() {
      ulong startTime = GetTickCount();
      CL_STATUS status;
      cl_mem data_buf;
      data_buf = ctx.CreateBuffer(CL_MEM_ALLOC_HOST_PTR,CL_MEM_READ_WRITE,m_SizeX*m_SizeY,FLOAT,status);
      if (status!=CL_SUCCESS) {
         Alert("CreateBuffer: ", EnumToString(status));
         return (-1);
      }
      float x0 = -2;
      float y0 = -0.5;
      float x1 = -1;
      float y1 =  0.5;
      uint  max = iterations;
      
      
      kernel.SetArg(0,x0);
      kernel.SetArg(1,y0);
      kernel.SetArg(2,x1);
      kernel.SetArg(3,y1);
      kernel.SetArg(4,max);
      kernel.SetArg(5,data_buf);
      
      uint offset[2] =  {0,0};
      uint work  [2];  work[0]= m_SizeX; work[1]= m_SizeY;
      uint group [2];  group [0] = wgs; group [1] = 1; 
      
      status = queue.NDRange(kernel, 2, offset, work, group);
      oclFlush(queue);
      
      for (int y=0;y<m_SizeY;y++) {
         status = queue.ReadBuffer(data_buf,true,y*m_SizeX,m_SizeX,Line[y].Pixel);
         if (status!=CL_SUCCESS) {
            Alert("ReadBuffer: ", EnumToString(status));
            break;
         }
      }
      oclFinish(queue);
      
      data_buf.Release();
      queue.Release();
      uint endTime = GetTickCount();
      return (int)(endTime-startTime);
   }
   
   uint calcMQL() {
      uint startTime = GetTickCount();
      float x0 = -2;
      float y0 = -0.5;
      float x1 = -1;
      float y1 =  0.5;
      uint  max = iterations;
      uint  w = m_SizeX;
      uint  h = m_SizeY;
      
      for (uint gy =0;gy<h;gy++) {
         for (uint gx =0;gx<w;gx++) {
            float dx = x0 + gx * (x1-x0) / w;
            float dy = y0 + gy * (y1-y0) / h;

            float x  = 0;
            float y  = 0;
            float xx = 0;
            float yy = 0;
            float xy = 0;
            uint i = 0;
            while ((xx+yy)<4 && i<max) {
               xx = x*x;
               yy = y*y;
               xy = x*y;
               y = xy+xy+dy;
               x = xx-yy+dx;
               i++;
            }

            if (i == max) {
               Line[gy].Pixel[gx]=0;
            } else {
               Line[gy].Pixel[gx] = (int) (((float)i/max)*0xFFFFFF);
                 }
         }
      }
      uint endTime = GetTickCount();
      return (int)(endTime-startTime);
   }
};
 
Graff:

Как успехи? JavaDev больше месяца в скайпе на связь не выходит.

Я с ним связался,  JavaDev следит за темой.
 
joo:
Я с ним связался,  JavaDev следит за темой.
Ура. появилась надежда, что проект не здохнет :)
 

Лекция 1 здесь https://www.mql5.com/ru/forum/4956/page23

Лекция 2. Биологические методы пробразования информации

Я ненадолго оставлю принцип разряжённости в сетях и кратко рассмотрю суть биологического преобразования информации. Потом всё свяжу вместе. Для примера рассмотрим преобразование информации в зрительной коре. Эта тема далека от трейдинга, но помогает черпнуть умные мысли. Кстати, многие сети такие как карты Кохонена и методы самобучения весов были введены в попытках моделирования зрительной коры. Итак, зрительная информация преобразуется в элекрические сигналы фоторецепторными клетками сетчатки, затем фильтруется ганглионарными клетками сетчатки (RGC) и затем посылается в зрительную кору через реле-клетки LGN, назначение которых пока плохо понятно. Ганглионарные клетки сетчатки действуют как полосовые пространственные фильтры, выделяя контуры обьектов. Принцип их работы очень похож на функцию выделения границ (edge detection) в фотошопе. Это довольно интересно что мы воспринимаем мир через границы объектов. В зрительной коре мозга, отфильтрованное изображение проходит через несколько нейронных слоёв с заумными названиями и абривиатурами. Существует два канала преобразования зрительной информации: канал "что", осуществляющий распознование объектов, и параллельный канал "где" для локализации объектов и восприятия их движения. Нам интересен первый канал, состоящий из двумерных слоёв V1, V2, V4, и IT, которые организованы параллельно сетчатке (не в пространстве, а функционально). Строение этих слоёв довольно сложное. Электрические сигналы передаются от ганглионарных клеток сетчатки к V1, от V1 к V2, и т.д. Клетки одного слоя берут свои входы от клеток предыдущего слоя (прямое распространение сигнала), а также от своих соседей (внутрислойные рекуррентные связи). Существуют также обратные связи, которыми часто пренебрегают в силу их плохого понимания. Преобразование информации в зрительной коре можно графически представить в следующем упрощённом виде:

 

Simple cells S1 (простые клетки S1) лежат в V1. Они представляют собой фильтры элементарных фрагментов контуров (границ объектов), то есть коротких отрезков линий с разным углом наклона, разной длины, разной полярности (светлая линия на тёмном фоне, тёмная линия на светлом фоне), и разным расположением в двумерном пространстве. Каждая S1 клетка по существу "смотрит" на определённый участок изображения через узкую "щель" определённого наклона и длины и реагирует только тогда когда контур в этом участке совпадает по наклону, длинe и полярности с "щелью".

Complex cells C1 (сложные клетки C1) тоже лежат в V1 слое. Они как и простые клетки S1 реагируют на короткие отрезки контуров определённого наклона и длины в определённом участке изображения, но менее чувствительны к параллельным сдвигам этих отрезков (shift invariance).

Simple cells S2 (простые клетки S2) лежат в слоях V2 и V4. Они представляют собой пространственные фильтры более сложных фигур, состоящих из двух прямых отрезков разного наклона и длины (например, Г, T, L, V, X). Они реагируют на эти фигуры в разных местах изображения.

Complex cells C2 (сложные клетки C1) лежат в слоях V2 и V4. Они тоже представляют собой пространственные фильтры более сложных фигур, состоящих из двух прямых отрезков разного наклона и длины , но менее чувствительны к параллельным сдвигам этих фигур.

View cells (или simple cells S3) лежат в слое IT. Они реагируют на ещё более сложные фигуры разной ориентации и размера (объекты).

Object selective sells (или complex cells C3) тоже лежат в слое IT. Они тоже реагируют на объекты разной ориентации и размера, но независимо от их расположения.

Такое многослойное преобразование зрительной информации позволяет нашему мозгу распознать объект независимо от его расположения в изображении, его ориентации и размера. Распознавание (классификация) объекта осуществляется в следующем слою зрительной коры, называемом prefrontal cortex (PFC).

 
Как назовем проект?
 
TheXpert:
Как назовем?
Если вопрос ко мне, то в литературе, описанные мною сети называют hierarchical neural networks.
 
TheXpert:
А ты логотип думай :)
По идее надо чтобы перекликалось ( дружило ) с лого метаквот
 
TheXpert:
Как назовем?

Meta Universal Neural Network (MUNN)

Или ты на универсальность не претендуешь?

 
Urain:
претендуешь?
Претендуешь. Но не нестолько сильно. Perception это восприятие. Любую сеть можно представить как черный ящик, получающий и преобразующий информацию из органов восприятия (входов).
 
Artificial Brain
Причина обращения: