Participe de nossa página de fãs
Coloque um link para ele, e permita que outras pessoas também o avaliem
Avalie seu funcionamento no terminal MetaTrader 5
Exemplo de uso do modelo ONNX para reconhecer dígitos desenhados - expert para MetaTrader 5
- Visualizações:
- 986
- Avaliação:
- 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.11471312493085861Por 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
Tempo local e de servidor
Informações sobre entradas e saídas do modelo ONNXScript para obter informações sobre o número, tipos e tamanhos de tensores de entrada e saída do modelo onnx
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 1O 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++.