运行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

复杂型

 

另见

类型转换