MetaTrader5
使用ONNX模型识别手写数字的专家顾问
一款能识别手写数字的专家顾问 大家好!今天我想跟大家分享一款基于MNIST数据库的专家顾问,它可以识别手写数字。这个数据库包含了60,000张用于训练的图像和10,000张用于测试的图像,这些图像是从美国人口普查局获得的20x20像素的黑白样本经过“重混合”而成,并且还添加了来自美国高中生的测试样本。这些样本经过标准化,调整为28x28像素的大小,并进行了抗锯齿处理,这样就引入了灰度级别。 我们下载的手写数字识别模型为mnist.onnx,来自Model Zoo(opset 8)。有兴趣的朋友们可以下载并尝试其他模型,但请注意避免使用opset 1的模型,因为新版本的ONNX运行时不再支持它。值得一提的是,输出向量并没有使用通常在分类模型中使用的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)的识别准确率明显较低,而左倾的数字识别得更准确。
2023.11.23