Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Facebook!
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
Você gostou do script?
Avalie seu funcionamento no terminal MetaTrader 5
Experts

Exemplo de uso do modelo ONNX para reconhecer dígitos desenhados - expert para MetaTrader 5

Visualizações:
686
Avaliação:
(9)
Publicado:
2023.11.24 07:33
Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance

Expert capaz de reconhecer números manuscritos

A base de dados MNIST consiste em 60.000 imagens para treinamento e 10.000 imagens para teste. Essas imagens foram criadas após o processamento de um conjunto original de amostras em preto e branco de 20x20 pixels do NIST, que por sua vez foram obtidas pelo Bureau de Censo dos EUA e complementadas com amostras de teste escritas por estudantes de universidades americanas. As amostras foram normalizadas e convertidas em imagens em tons de cinza de 28x28 pixels.

O modelo treinado para reconhecimento de números manuscritos mnist.onnx foi baixado do GitHub no conjunto de modelos (opset 8). Se desejar, você pode baixar e experimentar outros modelos, exceto o modelo com opset 1, que não é mais suportado pelo runtime mais recente do onnx. Um fato surpreendente é que o vetor de saída não foi processado pela função de ativação Softmax, como é comum em modelos de classificação. Mas isso não é um problema, faremos isso manualmente.

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("value ",predict," predicted with probability ",result[predict]);

   return(predict);
  }


 Os números são desenhados em uma grade especial usando o mouse com o botão esquerdo pressionado. Para reconhecer o número desenhado, basta clicar no botão CLASSIFICAR.




Se a probabilidade obtida para o número reconhecido for inferior a 0,8, o vetor de resultado com as probabilidades para cada classe será registrado no log. Experimente, por exemplo, classificar um campo de entrada em branco não preenchido.

[0.095331445,0.10048489,0.10673151,0.10274081,0.087865397,0.11471312,0.094342403,0.094900772,0.10847695,0.09441267]
value 5 predicted with probability 0.11471312493085861
Por alguma razão, são os noves que são pior reconhecidos. Os números desenhados com uma inclinação para a esquerda são melhor reconhecidos.


Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/47225

Funções de Tempo Aplicadas no Código Funções de Tempo Aplicadas no Código

Tempo local e de servidor

Informações sobre entradas e saídas do modelo ONNX Informações sobre entradas e saídas do modelo ONNX

Script para obter informações sobre o número, tipos e tamanhos de tensores de entrada e saída do modelo onnx

Timeframe to short name Timeframe to short name

Essa função me retorna os nomes encurtados dos timeframes Exemplo: "M1" em vez de "PERIOD_M1"

Programação no MQL5 para traders: códigos-fonte retirados do livro. Parte 1 Programação no MQL5 para traders: códigos-fonte retirados do livro. Parte 1

O primeiro capítulo do livro apresenta a linguagem e o ambiente de desenvolvimento MQL5. Uma das principais mudanças no MQL5 em comparação com o MQL4 (linguagem MetaTrader 4) é o suporte à programação orientada a objetos (OOP), que o torna semelhante ao C++.