Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Telegram!
und werden Sie Mitglied unserer Fangruppe
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5
Expert Advisors

Beispiel für die Verwendung eines ONNX-Modells zur Erkennung handgeschriebener Zahlen - Experte für den MetaTrader 5

Ansichten:
422
Rating:
(9)
Veröffentlicht:
2023.11.23 16:21
mnist.onnx (25.83 KB)
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Ein Expert Advisor, der handgeschriebene Ziffern erkennen kann

Die Datenbank MNIST-Datenbank besteht aus 60.000 Bildern zum Trainieren und 10.000 Bildern zum Testen. Diese Bilder wurden durch „Remixen“ eines ursprünglichen NIST-Satzes von 20x20-Pixel-Schwarz-Weiß-Mustern erstellt, die wiederum vom US Census Bureau stammen und mit Testmustern von amerikanischen Highschool-Schülern ergänzt wurden. Die Muster wurden auf eine Größe von 28x28 Pixeln normalisiert und mit Anti-Aliasing versehen, wodurch Graustufen eingeführt wurden.

Das trainierte Modell zur Erkennung handgeschriebener Ziffern mnist.onnx wurde von Github von Model Zoo (opset 8) heruntergeladen. Interessierte können andere Modelle herunterladen und ausprobieren, mit Ausnahme der Modelle mit Opset 1, das von der neuesten ONNX-Laufzeitumgebung nicht mehr unterstützt wird. Überraschenderweise wurde der Ausgangsvektor nicht mit der Softmax-Aktivierungsfunktion verarbeitet, wie es bei Klassifikationsmodellen üblich ist. Das ist jedoch kein Problem; wir können dies leicht selbst umsetzen.

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


 Zeichnen Sie die Ziffern mit der Maus in ein spezielles Raster, indem Sie die linke Maustaste gedrückt halten. Um die gezeichnete Ziffer zu erkennen, drücken Sie die Taste CLASSIFY.




Wenn die ermittelte Wahrscheinlichkeit für die erkannte Ziffer kleiner als 0,8 ist, wird der resultierende Vektor mit den Wahrscheinlichkeiten für jede Klasse im Protokoll ausgedruckt. Versuchen Sie 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]
value 5 predicted with probability 0.11471312493085861
Aus irgendeinem Grund ist die Erkennungsgenauigkeit bei der Zahl Neun (9) deutlich geringer. Linksbündige Ziffern werden genauer erkannt.


Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/47225

RectangleTest RectangleTest

Der EA tradet mit Hilfe des Rectangle, EMA und SMA Indikator.

Multisymbol Spread Monitoring Multisymbol Spread Monitoring

Stores the max spread of each selected symbol during a period.

MQL5 Programming for Traders – Quellcodes aus dem Buch. Teil 1 MQL5 Programming for Traders – Quellcodes aus dem Buch. Teil 1

Im ersten Kapitel des Buches werden die Sprache und die Entwicklungsumgebung von MQL5 vorgestellt. Eine der neuen Eigenschaften, die in der MQL5-Sprache im Vergleich zu MQL4 (MetaTrader 4-Sprache) eingeführt wurden, ist die Unterstützung der objektorientierten Programmierung (OOP), die sie C++ ähnlich macht.

MQL5 Programming for Traders – Quellcodes aus dem Buch. Teil MQL5 Programming for Traders – Quellcodes aus dem Buch. Teil

Teil 2 "Grundlagen der MQL5-Programmierung" ist eine Einführung in die wichtigsten Konzepte dieser Programmiersprache. Dieser Teil des Buches ist den Datentypen, Bezeichnern, Variablen, Ausdrücken und Operatoren gewidmet. Sie lernen, wie man verschiedene Anweisungen zu einer Programmlogik kombiniert.