Cómo usar un modelo ONNX para reconocer dígitos escritos a mano en MetaTrader 5

Mike 2023.11.23 23:15 17 0 0
Archivos adjuntos

Asesor Experto que Reconoce Dígitos Escritos a Mano

La base de datos MNIST contiene 60,000 imágenes para entrenamiento y 10,000 para pruebas. Estas imágenes fueron creadas al "remixear" un conjunto original de NIST de muestras en blanco y negro de 20x20 píxeles, las cuales fueron obtenidas del Buró del Censo de EE.UU. y complementadas con muestras de estudiantes de secundaria americanos. Las muestras fueron normalizadas a un tamaño de 28x28 píxeles y se les aplicó un filtro antialiasing, lo que introdujo niveles de escala de grises.

El modelo entrenado de reconocimiento de dígitos manuscritos mnist.onnx fue descargado de Github del Model Zoo (opset 8). Aquellos interesados pueden descargar y probar otros modelos, excluyendo aquellos con opset 1, que ya no es compatible con la última ejecución de ONNX. Curiosamente, el vector de salida no fue procesado con la función de activación Softmax, como es común en los modelos de clasificación. Pero, no te preocupes, que esto lo podemos implementar fácilmente nosotros mismos.

int PredecirNumero(void)
  {
   static matrixf imagen(28,28);
   static vectorf resultado(10);

   PrepararMatriz(imagen);

   if(!OnnxEjecutar(ModeloExt,ONNX_DEFAULT,imagen,resultado))
     {
      Imprimir("Error en OnnxEjecutar ",ObtenerUltimoError());
      return(-1);
     }

   resultado.Activacion(resultado,AF_SOFTMAX);
   int predecir=int(resultado.ArgMax());
   if(resultado[predecir]<0.8)
      Imprimir(resultado);
      Imprimir("valor ",predecir," predicho con probabilidad ",resultado[predecir]);

   return(predecir);
  }


 Dibuja los dígitos en una cuadrícula especial usando el ratón, manteniendo presionado el botón izquierdo. Para reconocer el dígito dibujado, presiona el botón CLASIFICAR.




Si la probabilidad obtenida para el dígito reconocido es menor a 0.8, el vector resultante con probabilidades para cada clase se imprime en el registro. Por ejemplo, prueba a clasificar un campo de entrada vacío sin llenar.

[0.095331445,0.10048489,0.10673151,0.10274081,0.087865397,0.11471312,0.094342403,0.094900772,0.10847695,0.09441267] valor 5 predicho con probabilidad 0.11471312493085861
Por alguna razón, la precisión del reconocimiento es notablemente inferior para el número nueve (9). Los dígitos inclinados hacia la izquierda son reconocidos con mayor precisión.


Lista
Comentarios 0