Startseite Systemhandel Beitrag

Handschriftliche Zahlen erkennen: Ein Expert Advisor für MetaTrader 5

Anhang
47225.zip (25.17 KB, Herunterladen 0 mal)

Ein Expert Advisor zur Erkennung handschriftlicher Ziffern

Die MNIST-Datenbank besteht aus 60.000 Bildern zum Trainieren und 10.000 Bildern zum Testen. Diese Bilder wurden durch die "Neumischung" eines ursprünglichen NIST-Sets von 20x20 Pixel großen Schwarzweißmustern erstellt, die vom US Census Bureau stammen und durch Testmuster amerikanischer Oberschüler ergänzt wurden. Die Muster wurden auf eine Größe von 28x28 Pixel normalisiert und geglättet, was Graustufen erzeugte.

Das trainierte Modell zur Erkennung handschriftlicher Ziffern mnist.onnx wurde von Github heruntergeladen, genauer gesagt aus dem Model Zoo (opset 8). Interessierte können auch andere Modelle herunterladen und ausprobieren, jedoch nicht die Modelle mit opset 1, die von der neuesten ONNX-Runtime nicht mehr unterstützt werden. Überraschenderweise wurde der Ausgabewert nicht mit der Softmax Aktivierungsfunktion verarbeitet, wie es in Klassifikationsmodellen üblich ist. Aber kein Problem, das können wir selbst einfach implementieren.

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

   PrepareMatrix(image);

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

   result.Activation(result,AF_SOFTMAX);
   int predict=int(result.ArgMax());
   if(result[predict]<0.8)
      Print(result);
      Print("Wert ",predict," mit Wahrscheinlichkeit ",result[predict]);

   return(predict);
  }

Zeichne Ziffern in einem speziellen Raster, indem du die linke Maustaste gedrückt hältst. Um die gezeichnete Ziffer zu erkennen, drücke den CLASSIFY-Button.


Wenn die erhaltene Wahrscheinlichkeit für die erkannte Ziffer weniger als 0,8 beträgt, wird der resultierende Vektor mit Wahrscheinlichkeiten für jede Klasse im Protokoll ausgegeben. Versuche zum Beispiel, ein leeres, nicht ausgefülltes Eingabefeld zu klassifizieren.

[0.095331445,0.10048489,0.10673151,0.10274081,0.087865397,0.11471312,0.094342403,0.094900772,0.10847695,0.09441267]
Wert 5 mit Wahrscheinlichkeit 0.11471312493085861 vorhergesagt.

Aus irgendeinem Grund ist die Erkennungsgenauigkeit beim Ziffern neun (9) bemerkenswert geringer. Links geneigte Ziffern werden genauer erkannt.

Verwandte Beiträge

Kommentar (0)