Voir comment télécharger gratuitement des robots de trading
Retrouvez-nous sur Twitter !
Rejoignez notre page de fans
Un script intéressant ?
Poster un lien vers celui-ci -
laisser les autres l'évaluer
Vous avez aimé le script ? Essayez-le dans le terminal MetaTrader 5
Experts

Exemple d'utilisation d'un modèle ONNX pour reconnaître des chiffres manuscrits - expert pour MetaTrader 5

Vues:
308
Note:
(9)
Publié:
2023.11.27 08:55
mnist.onnx (25.83 KB)
Besoin d'un robot ou d'un indicateur basé sur ce code ? Commandez-le sur Freelance Aller sur Freelance

Un Expert Advisor capable de reconnaître des chiffres manuscrits

La base de données MNIST se compose de 60 000 images pour la formation et de 10 000 images pour le test. Ces images ont été créées en "remixant" un ensemble original d'échantillons noir et blanc de 20x20 pixels du NIST, eux-mêmes obtenus auprès du US Census Bureau et complétés par des échantillons de test prélevés sur des lycéens américains. Les échantillons ont été normalisés à une taille de 28x28 pixels et anti-aliasés (sans crénelage), ce qui a permis d'introduire des niveaux de gris.

Le modèle de reconnaissance de chiffres manuscrits mnist.onnx a été téléchargé de Github à partir de Model Zoo (opset 8). Les personnes intéressées peuvent télécharger et essayer d'autres modèles, à l'exception des modèles avec opset 1, qui n'est plus supporté par le dernier runtime ONNX. Il est surprenant de constater que le vecteur de sortie n'a pas été traité avec la fonction d'activation Softmax, comme c'est souvent le cas dans les modèles de classification. Ce n'est toutefois pas un problème ; nous pouvons facilement le mettre en œuvre nous-mêmes.

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);
  }


 Dessinez les chiffres dans une grille spéciale à l'aide de la souris, en maintenant le bouton gauche de la souris enfoncé. Pour reconnaître le chiffre dessiné, appuyez sur la touche CLASSIFY.




Si la probabilité obtenue pour le chiffre reconnu est inférieure à 0,8, le vecteur résultant avec les probabilités pour chaque classe est imprimé dans le journal. Par exemple, essayez de classer un champ de saisie vide et non rempli.

[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
Pour une raison ou une autre, la précision de la reconnaissance est nettement inférieure pour le chiffre neuf (9). Les chiffres inclinés à gauche sont reconnus avec plus de précision.


Traduit du russe par MetaQuotes Ltd.
Code original : https://www.mql5.com/ru/code/47225

Sample program for async/sync all close. Sample program for async/sync all close.

This is a simple program to compare asynchronous and synchronous all close. It is a sample program, so feel free to modify it for your own testing purposes, such as adding conditions.

Candlestick Wick Imbalance Candlestick Wick Imbalance

Candlestick Wick Imbalance

Horizontal Grid Controller Horizontal Grid Controller

Horizontal Grid Controller with KeyEvents

Envelopes beginner tutorial By William210 Envelopes beginner tutorial By William210

Envelopes beginner tutorial to learn how to code in MQL5