MetaTrader 5 / Experts

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

1425
(10)

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