Home Systeemhandel Bericht

Handgeschreven Cijfers Herkennen met een Expert Advisor voor MetaTrader 5

Bijlage
47225.zip (25.17 KB, Downloaden 0 keer)

Een Expert Advisor die handgeschreven cijfers herkent

De MNIST database bevat 60.000 afbeeldingen voor training en 10.000 afbeeldingen voor testen. Deze afbeeldingen zijn gemaakt door een originele NIST-set van 20x20 pixels zwart-wit monsters opnieuw te combineren, die op hun beurt zijn verkregen van het Amerikaanse Census Bureau en aangevuld met testmonsters van Amerikaanse middelbare scholieren. De monsters zijn genormaliseerd naar een formaat van 28x28 pixels en anti-aliasing is toegepast, wat grijswaarden heeft geïntroduceerd.

Het getrainde model voor het herkennen van handgeschreven cijfers, mnist.onnx, is gedownload van Github via de Model Zoo (opset 8). Geïnteresseerden kunnen ook andere modellen downloaden, met uitzondering van modellen met opset 1, die niet meer worden ondersteund door de laatste ONNX-runtime. Verrassend genoeg is de outputvector niet verwerkt met de Softmax activatiefunctie, zoals gebruikelijk is in classificatiemodellen. Maar dat is geen probleem, want we kunnen dit gemakkelijk zelf implementeren.

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("waarde ",predict," voorspeld met waarschijnlijkheid ",result[predict]);

   return(predict);
  }


 Teken cijfers in een speciaal raster met de muis, terwijl je de linkermuisknop ingedrukt houdt. Om het getekende cijfer te herkennen, druk je op de knop CLASSIFY.




Als de verkregen waarschijnlijkheid voor het herkende cijfer minder dan 0.8 is, wordt de resulterende vector met waarschijnlijkheden voor elke klasse naar de log geprint. Probeer bijvoorbeeld een lege, niet ingevulde invoerveld te classificeren.

[0.095331445,0.10048489,0.10673151,0.10274081,0.087865397,0.11471312,0.094342403,0.094900772,0.10847695,0.09441267] waarde 5 voorspeld met waarschijnlijkheid 0.11471312493085861
Om de een of andere reden is de herkenningsnauwkeurigheid merkbaar lager voor het cijfer negen (9). Cijfers die naar links hellen, worden nauwkeuriger herkend.


Gerelateerde berichten

Reactie (0)