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
- So integrierst du hochkarätige Wirtschaftsdaten in deinen EA für MetaTrader 4
- Handelssignale mit MQL5 Wizard: Bullish und Bearish Harami mit CCI bestätigen
- MQL5 Wizard: Trade Signale auf Basis von Kurs-Crossover mit gleitendem Durchschnitt und ADX Bestätigung
- Erstelle einen Expert Advisor basierend auf dem Center of Gravity Indikator für MetaTrader 4
- MQL5 Wizard: Handels-Signale mit 3 schwarzen Krähen / 3 weißen Soldaten + CCI für MetaTrader 5