跳至内容
自动数据类型转换

自动数据类型转换

运行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_BOOLbool, char, uchar, short, ushort, int, color, uint, datetime, long, folat, double, complex

在转换过程中,通过与0的简单比较来检查Data元素
ONNX_DATA_TYPE_FLOAT16float, double
ONNX_DATA_TYPE_FLOATchar, 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_BOOLbool, char, uchar, short, ushort, int, color, uint, datetime, long, folat, double, complex

如果张量元素为零,则Data元素设为0;否则,该值为1
ONNX_DATA_TYPE_FLOAT16float, double
ONNX_DATA_TYPE_FLOATchar, 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复杂型

另见

类型转换