Discussão do artigo "Redes Neurais de Maneira Fácil" - página 8

 

Olá, Dmitriy,

Estou trabalhando nas duas primeiras partes da sua série "Redes neurais" há algumas semanas e sempre me deparo com o seguinte código ao percorrer os neurônios (ou outras coisas).

Eu realmente não entendo - na minha opinião, isso sempre deixaria de fora o último elemento. As funções Total() devem retornar uma contagem, então você remove uma E usa "<" no loop for. Portanto, para uma contagem Total() de 2, você só executaria o loop for uma vez.

O que estou perdendo?

Com os melhores cumprimentos,

Delf


   int total=Layer.Total()-1;
   for(int n=0; n<total; n++)
     {
      CNeuron *neuron=Layer.At(n);
      resultVals.Add(neuron.getOutputVal());
     }
 

Em algum trecho de código, você escreveu algo como:

int total=Layer.Total()-1;
   for(int n=0; n<total; n++)
     {
      CNeuron *neuron=Layer.At(n);
      resultVals.Add(neuron.getOutputVal());
     }
  }

mas suponha que tenhamos 20 neurônios na camada e atribuímos a variável total com 19 [int total=Layer.Total()-1], de modo que agora o total é igual a 19, quando iteramos sobre os neurônios do índice 0-18 (total=19), nunca chegamos ao índice 19 (último neurônio), acho que devemos alterar o código com:

int total=Layer.Total();
   for(int n=0; n<=total; n++)
     {
      CNeuron *neuron=Layer.At(n);
      resultVals.Add(neuron.getOutputVal());
     }
  }

ou

int total=Layer.Total()-1;
   for(int n=0; n<= total; n++)
     {
      CNeuron *neuron=Layer.At(n);
      resultVals.Add(neuron.getOutputVal());
     }
  }

para alcançar o último neurônio da camada.

Qual é a sua ideia?

 
Hedayat Yazdani:

Em algum trecho de código, você escreveu algo como:

mas suponha que temos 20 neurônios na camada e atribuímos a variável total com 19 [int total=Layer.Total()-1], de modo que agora o total é igual a 19, quando iteramos sobre os neurônios do índice 0-18 (total=19), nunca alcançamos o índice 19 (último neurônio), acho que devemos alterar o código com:

ou

para alcançar o último neurônio da camada.

Qual é a sua ideia?

Em cada camada, adicionamos mais um neurônio para o deslocamento bayesiano. Portanto, ao chamar a função para criar uma camada com 20 neurônios, criamos 21 neurônios. E Layer.Total() retornará 21. Mas os dados de entrada terão apenas 20 elementos. O último neurônio bayesiano sempre tem "1" na saída. Por isso, uso Layer.Total()-1. No loop, uso "<" porque o primeiro elemento da matriz tem índice '0'.

 
Boa noite, gostaria de saber se na hora de criação é pra fazer Expert Advisor, Indicador ou Script?
 
MetaQuotes:

Foi lançado o novo artigo Neural Networks Made Easy:

Escrito por Dmitriy Gizlyk

Olá, estou aprendendo redes neurais pela primeira vez e seu artigo é muito adequado para mim, mas gostaria de saber por que o -1 é necessário em muitos lugares, como: nextLayer.Total () - 1, para que não corresponda ao número de neurônios na próxima camada.

 
Ping You Jiang #:

Olá, estou aprendendo rede neural pela primeira vez e seu artigo é muito adequado para mim, mas gostaria de saber por que o -1 é necessário em muitos lugares, como: nextLayer. () - 1, para que não corresponda ao número de neurônios na próxima camada.

No mql5, todos os índices de matriz começam em 0. E nextLayer.Total() retorna o número total de neurônios. Portanto, se retornar 10, isso significa que os elementos da matriz têm índices de 0 a 9.

 

Na verdade, recebo um erro de compilação quando faço o download do arquivo.

NeuroNet.mqh

 
Muhammad Saleem #: Na verdade, recebo um erro de compilação quando faço o download do arquivo.

Tente usar a função GetPointer.

 
Dmitriy Gizlyk #: Tente usar a função GetPointer.

Oi Dmitriy, obrigado por esse artigo. Por favor, para esse erro, como posso corrigi-lo? Você poderia fornecer o código corrigido?

 
Muhammad Saleem #: Na verdade, recebo um erro de compilação quando faço o download do arquivo.

Oi Muhammad, você conseguiu corrigir esse erro?