Início Negociação Sistemática Postagem

Reconhecimento de Dígitos Manuscritos com um Expert Advisor para MetaTrader 5

Anexo
47225.zip (25.17 KB, Baixar 0 vezes)

Um Expert Advisor que Reconhece Dígitos Manuscritos

A base de dados MNIST é composta por 60.000 imagens para treinamento e 10.000 imagens para teste. Essas imagens foram criadas a partir de um conjunto original do NIST, com amostras em preto e branco de 20x20 pixels, coletadas do Censo dos EUA e complementadas com amostras de estudantes do ensino médio americanos. As amostras foram normalizadas para um tamanho de 28x28 pixels e passaram por um processo de suavização, o que introduziu níveis de cinza.

O modelo treinado para reconhecimento de dígitos manuscritos, mnist.onnx, foi baixado do Github, no Model Zoo (opset 8). Para quem se interessar, é possível baixar e testar outros modelos, exceto aqueles com opset 1, que não são mais suportados pela versão mais recente do ONNX. Curiosamente, o vetor de saída não foi processado com a função de ativação Softmax, como é comum em modelos de classificação. Mas não se preocupe, isso podemos implementar facilmente.

int PredictNumber(void)
  {
   static matrixf image(28,28);
   static vectorf result(10);

   PrepareMatrix(image);

   if(!OnnxRun(ExtModel,ONNX_DEFAULT,image,result))
     {
      Print("OnnxRun error ",GetLastError());
      return(-1);
     }

   result.Activation(result,AF_SOFTMAX);
   int predict=int(result.ArgMax());
   if(result[predict]<0.8)
      Print(result);
      Print("valor ",predict," previsto com probabilidade ",result[predict]);

   return(predict);
  }


 Desenhe os dígitos em uma grade especial usando o mouse, mantendo o botão esquerdo pressionado. Para reconhecer o dígito desenhado, clique no botão CLASSIFICAR.




Se a probabilidade obtida para o dígito reconhecido for inferior a 0.8, o vetor resultante com as probabilidades de cada classe é impresso no log. Por exemplo, tente classificar um campo de entrada vazio.

[0.095331445,0.10048489,0.10673151,0.10274081,0.087865397,0.11471312,0.094342403,0.094900772,0.10847695,0.09441267]
valor 5 previsto com probabilidade 0.11471312493085861
Por algum motivo, a precisão do reconhecimento é notavelmente menor para o número nove (9). Dígitos inclinados para a esquerda são reconhecidos com mais precisão.


Publicações relacionadas

Comentário (0)