MetaTrader 5 / エキスパート
ONNXモデルによる手書き数字の認識例 - MetaTrader 5のためのエキスパート
969
手書き数字を認識できるエキスパートアドバイザー
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