自动数据类型转换
运行ONNX模型时自动转换输入和输出值
MQL5中当前ONNX版本仅支持输入/输出值的张量。张量是包含以下数据类型元素的数据数组:
| ONNX类型 | 对应于MQL5类型 |
|---|---|
| ONNX_DATA_TYPE_BOOL | 布尔型 |
| ONNX_DATA_TYPE_FLOAT | 浮点型 |
| ONNX_DATA_TYPE_UINT8 | 无字符型(uchar)< |
| ONNX_DATA_TYPE_INT8 | 字符型(char) |
| ONNX_DATA_TYPE_UINT16 | 无符短型(ushort) |
| ONNX_DATA_TYPE_INT16 | 短整型(short) |
| ONNX_DATA_TYPE_INT32 | 整型(int) |
| ONNX_DATA_TYPE_INT64 | 长整型(long) |
| ONNX_DATA_TYPE_FLOAT16 | — |
| ONNX_DATA_TYPE_DOUBLE | 双精度 |
| ONNX_DATA_TYPE_UINT32 | 无符号整型(uint) |
| ONNX_DATA_TYPE_UINT64 | 无符长型(ulong) |
| ONNX_DATA_TYPE_COMPLEX64 | — |
| ONNX_DATA_TYPE_COMPLEX128 | 复杂型 |
| ONNX_DATA_TYPE_BFLOAT16 | — |
| ONNX_DATA_TYPE_STRING | — |
只有数组、向量和矩阵(我们将它们称为数据)可作为输入/输出值进入ONNX模型。
如果参数类型与ONNX模型的参数类型不匹配,并且在没有指定ONNX_NO_CONVERSION标识的情况下调用OnnxRun,将应用自动数据转换。自动转换意味着在运行ONNX模型之前,用户数据将通过相关转换被复制到ONNX张量中。
当ONNX模型在没有自动转换的情况下运行时,将使用数据计算模型,而无需任何额外的复制。
重要!自动转换不控制过载(截断),因此您应该仔细监控输入到ONNX模型中的数据和数据类型。
自动转换支持以下ONNX类型:
- ONNX_DATA_TYPE_BOOL
- ONNX_DATA_TYPE_FLOAT
- ONNX_DATA_TYPE_UINT8
- ONNX_DATA_TYPE_INT8
- ONNX_DATA_TYPE_UINT16
- ONNX_DATA_TYPE_INT16
- ONNX_DATA_TYPE_INT32
- ONNX_DATA_TYPE_INT64
- ONNX_DATA_TYPE_FLOAT16
- ONNX_DATA_TYPE_DOUBLE
- ONNX_DATA_TYPE_UINT32
- ONNX_DATA_TYPE_UINT64
- ONNX_DATA_TYPE_COMPLEX64
- ONNX_DATA_TYPE_COMPLEX128
不支持的类型:
- ONNX_DATA_TYPE_BFLOAT16
- ONNX_DATA_TYPE_STRING
张量类型的自动转换规则
如果MQL5类型未包含在模型支持的类型列表中,运行ONNX模型将返回ERR_ONNX_NOT_SUPPORTED错误(错误代码5802)。
注意:自动转换时,color类型被处理为uint,而datetime被处理为long。
输入值的自动转换
| ONNX类型(张量项目类型) | 自动转换支持的MQL5类型 |
|---|---|
| ONNX_DATA_TYPE_BOOL | bool, char, uchar, short, ushort, int, color, uint, datetime, long, folat, double, complex 在转换过程中,通过与0的简单比较来检查Data元素 |
| ONNX_DATA_TYPE_FLOAT16 | float, double |
| ONNX_DATA_TYPE_FLOAT | char, uchar, short, ushort, int, color, uint, datetime, long, ulong, float, double |
| ONNX_DATA_TYPE_UINT8 | 请见ONNX_DATA_TYPE_FLOAT |
| ONNX_DATA_TYPE_INT8 | 请见ONNX_DATA_TYPE_FLOAT |
| ONNX_DATA_TYPE_UINT16 | 请见ONNX_DATA_TYPE_FLOAT |
| ONNX_DATA_TYPE_INT16 | 请见ONNX_DATA_TYPE_FLOAT |
| ONNX_DATA_TYPE_INT32 | 请见ONNX_DATA_TYPE_FLOAT |
| ONNX_DATA_TYPE_INT64 | 请见ONNX_DATA_TYPE_FLOAT |
| ONNX_DATA_TYPE_DOUBLE | 请见ONNX_DATA_TYPE_FLOAT |
| ONNX_DATA_TYPE_UINT32 | 请见ONNX_DATA_TYPE_FLOAT |
| ONNX_DATA_TYPE_UINT64 | 请见ONNX_DATA_TYPE_FLOAT |
| ONNX_DATA_TYPE_COMPLEX64 | 复杂型 |
| ONNX_DATA_TYPE_COMPLEX128 | 复杂型 |
输出值的自动转换
| ONNX类型(张量项目类型) | 自动转换支持的MQL5类型 |
|---|---|
| ONNX_DATA_TYPE_BOOL | bool, char, uchar, short, ushort, int, color, uint, datetime, long, folat, double, complex 如果张量元素为零,则Data元素设为0;否则,该值为1 |
| ONNX_DATA_TYPE_FLOAT16 | float, double |
| ONNX_DATA_TYPE_FLOAT | char, uchar, short, ushort, int, color, uint, datetime, long, ulong, float, double |
| ONNX_DATA_TYPE_UINT8 | 请见ONNX_DATA_TYPE_FLOAT |
| ONNX_DATA_TYPE_INT8 | 请见ONNX_DATA_TYPE_FLOAT |
| ONNX_DATA_TYPE_UINT16 | 请见ONNX_DATA_TYPE_FLOAT |
| ONNX_DATA_TYPE_INT16 | 请见ONNX_DATA_TYPE_FLOAT |
| ONNX_DATA_TYPE_INT32 | 请见ONNX_DATA_TYPE_FLOAT |
| ONNX_DATA_TYPE_INT64 | 请见ONNX_DATA_TYPE_FLOAT |
| ONNX_DATA_TYPE_DOUBLE | 请见ONNX_DATA_TYPE_FLOAT |
| ONNX_DATA_TYPE_UINT32 | 请见ONNX_DATA_TYPE_FLOAT |
| ONNX_DATA_TYPE_UINT64 | 请见ONNX_DATA_TYPE_FLOAT |
| ONNX_DATA_TYPE_COMPLEX64 | 复杂型 |
| ONNX_DATA_TYPE_COMPLEX128 | 复杂型 |