Home Trading Sistematico Post

Utilizzare un Modello ONNX per Riconoscere le Cifre Scritte a Mano in MetaTrader 5

Allegato
47225.zip (25.17 KB, Scarica 0 volte)

Un Expert Advisor per il Riconoscimento delle Cifre Scritte a Mano

Il database MNIST è composto da 60.000 immagini utilizzate per l'addestramento e 10.000 per il test. Queste immagini sono state create "ri-mixando" un set originale NIST di campioni in bianco e nero di 20x20 pixel, ottenuti dal Bureau del Censimento degli Stati Uniti e arricchiti con campioni di test prelevati da studenti delle scuole superiori americane. I campioni sono stati normalizzati a una dimensione di 28x28 pixel e sono stati applicati filtri per migliorare la qualità, introducendo livelli di scala di grigi.

Il modello di riconoscimento delle cifre scritte a mano mnist.onnx è stato scaricato da Github dal Model Zoo (opset 8). Chi è interessato può scaricare e provare altri modelli, escludendo quelli con opset 1, che non è più supportato dall'ultima runtime di ONNX. Sorprendentemente, il vettore di output non è stato elaborato con la funzione di attivazione Softmax, come è comune nei modelli di classificazione. Ma non preoccupatevi, possiamo implementarlo facilmente noi stessi.

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

   PrepareMatrix(image);

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

   result.Activation(result,AF_SOFTMAX);
   int predict=int(result.ArgMax());
   if(result[predict]<0.8)
      Print(result);
      Print("valore ",predict," previsto con probabilità ",result[predict]);

   return(predict);
  }

Disegna le cifre in una griglia speciale utilizzando il mouse, tenendo premuto il pulsante sinistro. Per riconoscere la cifra disegnata, premi il pulsante CLASSIFICA.


Se la probabilità ottenuta per la cifra riconosciuta è inferiore a 0.8, il vettore risultante con le probabilità per ciascuna classe viene stampato nel log. Ad esempio, prova a classificare un campo di input vuoto non compilato.

[0.095331445,0.10048489,0.10673151,0.10274081,0.087865397,0.11471312,0.094342403,0.094900772,0.10847695,0.09441267]
valore 5 previsto con probabilità 0.11471312493085861

Per qualche motivo, l'accuratezza del riconoscimento è notevolmente inferiore per il numero nove (9). Le cifre inclinate a sinistra vengono riconosciute con maggiore precisione.

Post correlati

Commento (0)