欢迎访问 外汇EA下载与MT4/MT5自动交易资源 - 聚合外汇EA、黄金EA、量化交易工具与自动化交易实战内容。
登录 注册

使用 ONNX 模型识别手写数字的示例 - MetaTrader 5 专家

author emer | 140 人阅读 | 0 人评论 |

Example of using an ONNX model to recognize handwritten numbers - expert for MetaTrader 5

Example of using an ONNX model to recognize handwritten numbers - expert for MetaTrader 5

MNIST数据库包含 60,000 张训练图像和 10,000 张测试图像。这些图像是通过“重新混合”一组原始的 NIST 20x20 像素黑白样本而创建的,这些样本又从美国人口普查局获得,并补充了从美国高中生采集的测试样本。将样本标准化为 28x28 像素大小并进行抗锯齿处理,从而引入灰度级别。

训练好的手写数字识别模型 mnist.onnx 从 Github 下载模型动物园(opset 8)。有兴趣的人可以下载并尝试其他模型,不包括具有 opset 1 的模型,最新的 ONNX 运行时不再支持该模型。令人惊讶的是,输出向量没有经过处理软最大激活函数,这在分类模型中很常见。嗯,这不是问题,因为我们可以自己轻松实现。

整数预测数(空白)
  {
  静止的 矩阵f图像(28,28);
  静止的 向量f结果(10);

   准备矩阵(图像);

  如果(!Onnx运行(外部模型,ONNX_DEFAULT,图像,结果))
     {
      打印(“Onnx运行错误 ”,获取最后一个错误());
      返回(-1);
     }

  结果.激活(结果,AF_SOFTMAX);  整数预测=整数(结果.ArgMax());
  如果(结果[预测]<0.8)
      打印(结果);
  打印("值",预测,"以概率预测",结果[预测]);

  返回(预测);
  }


 使用鼠标在特殊网格中绘制数字,按住鼠标左键。要识别绘制的数字,请按分类按钮。

Example of using an ONNX model to recognize handwritten numbers - expert for MetaTrader 5

如果所获得的已识别数字的概率小于 0.8,则将包含每个类别的概率的结果向量打印到日志中。例如,尝试对空的未填充输入字段进行分类。

[0.095331445,0.10048489,0.10673151,0.10274081,0.087865397,0.11471312,0.094342403,0.094900772,0.10847695,0.09441267]
价值5以概率预测0.11471312493085861
由于某种原因,数字九 (9) 的识别准确度明显较低。向左倾斜的数字识别更准确。



附件下载

📎 testmnistonnx.mq5 (8.36 KB)

📎 mnist.onnx (25.83 KB)

Source: MQL5 #47225

🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录