使用ONNX模型识别手写数字的专家顾问

Mike 2023.11.23 23:15 11 0 0
附件

一款能识别手写数字的专家顾问

大家好!今天我想跟大家分享一款基于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)的识别准确率明显较低,而左倾的数字识别得更准确。


列表
评论 0