使用ONNX模型识别手写数字的示例 - MetaTrader 5EA
- 显示:
- 1205
- 等级:
- 已发布:
- 2023.11.27 08:51
- 需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
可识别手写数字的EA交易
MNIST数据库由60,000张用于练习的图像和10,000张用于测试的图像组成。这些图像通过"重新组合"一组原始NIST 20x20像素黑白样本来创建,这组样本从美国人口普查局获得,并补充从美国高中生中获取的测试样本。样本被标准化为28x28像素大小,并进行抗混叠处理,从而引入灰度级别。
测试的手写数字识别模型mnist.onnx从Model Zoo(opset 8)的Github下载。有兴趣的用户可以下载并试用其他模型,但不包括使用opset 1的模型,因为最新的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); }
按住鼠标左键,用鼠标在特殊网格中绘制数字。要识别绘制的数字,请按"分类"按键。
如果获得识别数字的概率小于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
交易者的MQL5编程(MQL5 Programming for Traders) - 源代码第一部分
本书第一章介绍了MQL5语言和开发环境。与MQL4(MetaTrader 4 语言)相比,MQL5语言其中一项新功能就是支持面向对象编程(OOP),这使其类似于C++。
交易者的MQL5编程(MQL5 Programming for Traders) - 源代码第二部分第二部分 "MQL5编程基础知识"介绍了该编程语言的核心概念。本书这一部分专门讨论数据类型、标识符、变量、表达式和运算符。您将学习了解如何组合不同的指令来形成程序逻辑。