MetaTrader 5 / エキスパート

ONNXモデルによる手書き数字の認識例 - MetaTrader 5のためのエキスパート

969
(10)

手書き数字を認識できるエキスパートアドバイザー

MNISTデータベースは、トレーニング用画像60,000枚とテスト用画像10,000枚で構成されています。これらの画像は、米国国勢調査局から入手したNISTオリジナルの20x20ピクセルの白黒サンプルに、米国の高校生から採取したテスト用サンプルを「再ミックス」して作成されています。サンプルは28x28ピクセルサイズに正規化され、アンチエイリアス処理が施され、グレイスケールレベルが導入されました。

訓練済みの手書き数字認識モデルmnist.onnxは、GithubのModel Zoo(opset 8)からダウンロードしました。興味のある方は、最新のONNXランタイムでサポートされなくなったopset 1を使ったモデルを除き、他のモデルをダウンロードして試すことができます。驚くべきことに、出力ベクトルは、分類モデルで一般的なSoftmax活性化関数では処理されませんでした。ただし、これは問題ではありません。自分たちで簡単に実装できます。

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


 マウスの左ボタンを押しながら、マウスを使って特別なグリッドに数字を書きます。描画された桁を認識するには、[CLASSIFY]ボタンを押します。




認識された桁の確率が0.8未満の場合、各クラスの確率を含むベクトルがログに出力されます。例として、空の未入力フィールドを分類してみましょう。

[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 
なぜか「9」の認識精度は著しく低くなっています。左斜めの数字がより正確に認識されます。


MetaQuotes Ltdによってロシア語から翻訳されました。
元のコード: https://www.mql5.com/ru/code/47225