Mira cómo descargar robots gratis
¡Búscanos en Facebook!
Pon "Me gusta" y sigue las noticias
¿Es interesante este script?
Deje un enlace a él, ¡qué los demás también lo valoren!
¿Le ha gustado el script?
Evalúe su trabajo en el terminal MetaTrader 5
Asesores Expertos

Ejemplo de uso de un modelo ONNX para reconocer números manuiscritos - Asesor Experto para MetaTrader 5

Visualizaciones:
529
Ranking:
(9)
Publicado:
2023.11.23 15:20
mnist.onnx (25.83 KB)
¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa

El asesor es capaz de reconocer números manuscritos

La base de datos MNIST está compuesta por 60 000 imágenes para el entrenamiento y 10 000 imágenes para las pruebas. Estas imágenes se crearon tras reprocesar el conjunto original de muestras en blanco y negro de 20x20 píxeles del NIST, que a su vez se obtuvieron de la Oficina del Censo de Estados Unidos y se completaron con muestras de prueba escritas por estudiantes de universidades estadounidenses. Las muestras se normalizaron y redujeron a una imagen de medios tonos grises de 28x28 píxeles.

El modelo entrenado de reconocimiento de números manuscritos mnist.onnx fue descargado del zoo park of models (opset 8). Quienes así lo deseen, podrán descargar y probar los otros modelos, salvo el modelo con el opset 1, que ya no es compatible con el onnx runtime reciente. Lo que más sorprendente resultó que el vector de salida no fuera procesado por la función de activación Softmax, como es habitual en los modelos de clasificación. Pero no pasa nada, lo haremos nosotros mismos

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


 Los números se dibujan en una cuadrícula especial usando el ratón con el botón izquierdo pulsado. Para reconocer el número dibujado, hay que pulsar el botón CLASSIFY.




Si la probabilidad resultante de un número reconocido es inferior a 0,8, el vector de resultados con las probabilidades de cada clase se imprimirá en el registro. Intente, por ejemplo, clasificar un campo de entrada vacío en blanco

[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 algún motivo, los nueves son los que peor se reconocen. Los números extraídos con inclinación hacia la izquierda se reconocen mejor.


Traducción del ruso realizada por MetaQuotes Ltd
Artículo original: https://www.mql5.com/ru/code/47225

Información sobre las entradas y salidas del modelo ONNX Información sobre las entradas y salidas del modelo ONNX

Script para obtener información sobre el número, los tipos y los tamaños de los tensores de entrada y salida del modelo onnx

Función que Calcula la Reducción Relativa Función que Calcula la Reducción Relativa

La reducción relativa es una relación entre la reducción máxima y el valor del máximo local correspondiente del capital. Es importante utilizar el Drawdown Relativo según el saldo como filtro de optimización.

Programación en MQL5 para tráders: códigos fuente del libro: Parte 1 Programación en MQL5 para tráders: códigos fuente del libro: Parte 1

El primer capítulo del libro presenta el lenguaje y el entorno de desarrollo MQL5. Uno de los principales cambios del lenguaje MQL5 en comparación con MQL4 (el lenguaje de MetaTrader 4) es la compatibilidad con la programación orientada a objetos (POO), lo cual lo hace similar a C++.

Programación en MQL5 para tráders: códigos fuente del libro: Parte 2 Programación en MQL5 para tráders: códigos fuente del libro: Parte 2

La segunda parte "Fundamentos de programación en MQL5" es una introducción a los conceptos clave de este lenguaje de programación. En esta parte del libro, los lectores se familiarizarán con los tipos de datos, los identificadores, las variables, las expresiones y los operadores, y también aprenderán a combinar diferentes instrucciones para formar la lógica de un programa.