O "New Neural" é um projecto de motor de rede neural Open Source para a plataforma MetaTrader 5. - página 34

 
Joo:
Vou tentar entrar em contato com ele - ele desaparece por um longo tempo. Claro, seria ótimo ter um artigo dedicado ao OpenCL com MQL5. Especialmente agora.

Como vai isso?JavaDev não está no Skype há mais de um mês.

Este é um pedaço de código dele a demonstrar como oOpenCL funciona.

[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:

Como vai isso?JavaDev não está no Skype há mais de um mês.

Eu contactei-o, JavaDev está de olho no assunto.
 
Joo:
Eu contactei-o, JavaDev está de olho no assunto.
Viva. Há esperança de que o projecto não morra :)
 

Palestra 1 aqui https://www.mql5.com/ru/forum/4956/page23

Palestra 2. Métodos biológicos de processamento de informação

Vou deixar brevemente o princípio das descargas em rede e considerar brevemente a essência da transformação biológica da informação. Então vou ligar tudo junto. Por exemplo, vamos considerar a transformação da informação no córtex visual. Este tópico está longe de ser negociado, mas ajuda a desenhar pensamentos inteligentes. A propósito, muitas redes, como a Kohonen maps e métodos de auto-treinamento em escala, foram introduzidas na tentativa de modelar o córtex visual. Assim, a informação visual é convertida em sinais elétricos pelas células fotorreceptoras da retina, depois filtrada pelas células ganglionares da retina (RGCs) e depois enviada ao córtex visual através das células de relé LGN, cuja finalidade ainda é mal compreendida. As células ganglionares da retina atuam como filtros espaciais band-pass, destacando os contornos dos objetos. A forma como eles funcionam é muito semelhante à função de detecção de bordas no Photoshop. É bastante interessante que percebemos o mundo através dos limites dos objectos. No córtex visual, a imagem filtrada passa por várias camadas neuronais com nomes e acrônimos abstrusos. Existem dois canais de conversão de informação visual: o canal 'o quê', que realiza o reconhecimento de objectos, e um canal paralelo 'onde' para localizar objectos e perceber o seu movimento. Estamos interessados no primeiro canal, que consiste nas camadas bidimensionais V1, V2, V4 e IT, que estão dispostas paralelamente à retina (não no espaço, mas funcionalmente). A estrutura destas camadas é bastante complexa. Os sinais elétricos são transmitidos das células ganglionares da retina para V1, de V1 para V2, etc. As células de uma camada tiram as suas entradas das células da camada anterior (propagação directa do sinal), bem como dos seus vizinhos (ligações recorrentes intra-camada). Há também ligações recorrentes, que muitas vezes são negligenciadas por serem mal compreendidas. A conversão de informações no córtex visual pode ser representada graficamente na seguinte forma simplificada:

As células simples S1 encontram-se em V1. São filtros de fragmentos elementares de contornos (bordas de objetos), ou seja, segmentos curtos de linhas com diferentes ângulos de inclinação, diferentes comprimentos, diferentes polaridades (linha clara sobre fundo escuro, linha escura sobre fundo claro), e diferentes localizações no espaço bidimensional. Cada célula S1 "olha" essencialmente para uma determinada secção da imagem através de uma "fenda" estreita de determinada inclinação e comprimento, e reage apenas quando o contorno dessa secção coincide em inclinação, comprimento e polaridade com a "fenda".

As células complexas C1 também se encontram na camada V1. Como as células simples S1, elas respondem a segmentos curtos de contornos de uma determinada inclinação e comprimento dentro de uma determinada área da imagem, mas são menos sensíveis a deslocamentos em paralelo a esses segmentos (invariância de deslocamento).

As células simples S2 encontram-se nas camadas V2 e V4. São filtros espaciais de formas mais complexas, consistindo em dois segmentos rectos de inclinação e comprimento diferentes (por exemplo, G, T, L, V, X). Eles respondem a estas formas em diferentes locais da imagem.

As células complexas C2 (células complexas C1) encontram-se nas camadas V2 e V4. Eles também são filtros espaciais de formas mais complexas que consistem em dois segmentos de linha reta de inclinação e comprimento diferentes, mas são menos sensíveis a deslocamentos paralelos dessas formas.

As células de visualização (ou células simples S3) encontram-se na camada de TI. Eles são sensíveis a formas ainda mais complexas de diferentes orientações e tamanhos (objetos).

As vendas seletivas de objetos (ou células complexas C3) também estão em uma camada de TI. Eles também reagem a objetos de diferentes orientações e tamanhos, mas independentemente da sua colocação.

Esta conversão de informação visual em várias camadas permite ao nosso cérebro reconhecer um objecto independentemente da sua localização na imagem, da sua orientação e tamanho. O reconhecimento (classificação) do objecto ocorre na camada seguinte do córtex visual, chamada córtex pré-frontal (PFC).

 
Como devemos chamar o projeto?
 
TheXpert:
Como devemos chamá-los?
Se a questão é para mim, na literatura, as redes que descrevi são chamadas redes neurais hierárquicas.
 
TheXpert:
Pense no logotipo :)
A idéia é que ele deve ressoar (ser amigo) com o logotipo methaquot
 
TheXpert:
Como devemos chamar-lhe?

Meta Universal Neural Network (MUNN)

Ou você não diz ser universal?

 
Urain:
Reivindicar?
Tu tens. Mas não tanto assim. Percepção é percepção. Qualquer rede pode ser pensada como uma caixa negra que recebe e transforma informações de órgãos perceptuais (inputs).
 
CérebroArtificial