- ONNX支持
- 格式转换
- 自动数据类型转换
- 创建模型
- 运行模型
- 运行策略测试
- OnnxCreate
- OnnxCreateFromBuffer
- OnnxRelease
- OnnxRun
- OnnxGetInputCount
- OnnxGetOutputCount
- OnnxGetInputName
- OnnxGetOutputName
- OnnxGetInputTypeInfo
- OnnxGetOutputTypeInfo
- OnnxSetInputShape
- OnnxSetOutputShape
- 数据结构
数据结构
以下数据结构用于ONNX模型的操作:
OnnxTypeInfo #
struct OnnxTypeInfo
|
只有张量(ONNX_TYPE_TENSOR)可以作为输入使用。在这种情况下,只有OnnxTypeInfo::tensor字段被填充值,而其他字段(映射和序列)没有定义。
三种OnnxTypeInfo类型(ONNX_TYPE_TENSOR、ONNX_TYPE_MAP或ONNX_TYPE_SEQUENCE)中只有一种可以作为输入使用。相对应的子结构(OnnxTypeInfo::tensor、OnnxTypeInfo::map或OnnxTypeInfo::sequence)根据类型来填充。
struct OnnxTensorTypeInfo
|
OnnxMapTypeInfo #
该结构描述了ONNX模型的输出参数中获得的映射
struct OnnxMapTypeInfo
|
OnnxSequenceTypeInfo #
该结构描述了ONNX模型的输出参数中获得的序列
struct OnnxSequenceTypeInfo
|
ENUM_ONNX_TYPE #
ENUM_ONNX_TYPE枚举描述了模型参数的类型
ID |
描述 |
---|---|
ONNX_TYPE_UNKNOWN |
未知 |
ONNX_TYPE_TENSOR |
Tensor |
ONNX_TYPE_SEQUENCE |
Sequence |
ONNX_TYPE_MAP |
Map |
ONNX_TYPE_OPAQUE |
Abstract (opaque) |
ONNX_TYPE_SPARSETENSOR |
Sparse tensor |
ENUM_ONNX_DATA_TYPE #
ENUM_ONNX_DATA_TYPE枚举描述了所用数据的类型
ID |
描述 |
---|---|
ONNX_DATA_TYPE_UNDEFINED |
未定义 |
ONNX_DATA_TYPE_FLOAT |
浮点型 |
ONNX_DATA_TYPE_INT8 |
8位整型 |
ONNX_DATA_TYPE_UINT16 |
16位无符号整型 |
ONNX_DATA_TYPE_INT16 |
16位整型 |
ONNX_DATA_TYPE_INT32 |
32位整型 |
ONNX_DATA_TYPE_INT64 |
64位整型 |
ONNX_DATA_TYPE_STRING |
字符串 |
ONNX_DATA_TYPE_BOOL |
布尔型 |
ONNX_DATA_TYPE_FLOAT16 |
16位浮点型 |
ONNX_DATA_TYPE_DOUBLE |
双精度 |
ONNX_DATA_TYPE_UINT32 |
32位无符号整型 |
ONNX_DATA_TYPE_UINT64 |
64位无符号整型 |
ONNX_DATA_TYPE_COMPLEX64 |
64位复数 |
ONNX_DATA_TYPE_COMPLEX128 |
128位复数 |
ONNX_DATA_TYPE_BFLOAT16 |
16位bfloat(大脑浮点) |
ENUM_ONNX_FLAGS #
ENUM_ONNX_FLAGS枚举描述了模型运行模式
ID |
描述 |
---|---|
ONNX_DEBUG_LOGS |
输出调试日志 |
ONNX_NO_CONVERSION |
禁用自动转换,按原样使用用户数据 |
ONNX_COMMON_FOLDER |
加载Common\Files文件夹的模型文件;该值等于FILE_COMMON标识 |
使用ONNX模型时的数组转换
机器学习任务并不总是需要更高的计算精度。为了加快计算速度,一些模型使用较低精度的数据类型,例如Float16甚至Float8。为了允许用户将相关数据输入到模型中,MQL5提供了四个特殊函数,可将标准MQL5类型转换为特殊的FP16和FP8类型。
函数 |
操作 |
---|---|
将float或double类型数组复制到给定格式的ushort类型的数组中 |
|
将float或double类型数组复制到给定格式的uchar类型的数组中 |
|
将ushort类型数组复制到给定格式的float或double类型的数组中 |
|
将uchar类型数组复制到给定格式的float或double类型的数组中 |
这些数组转换函数使用以下枚举中指定的特殊格式。
ENUM_FLOAT16_FORMAT #
ENUM_FLOAT16_FORMAT枚举描述了两种FP16类型格式。
ID |
描述 |
---|---|
FLOAT_FP16 |
标准16位格式,也称为half |
FLOAT_BFP16 |
这些格式中的每一种都有其优点和局限性。FLOAT16提供更高的精度,但需要更多的存储和计算资源。另一方面,BFLOAT16在数据处理方面提供了更高的性能和效率,但可能不太准确。
ENUM_FLOAT8_FORMAT #
ENUM_FLOAT8_FORMAT枚举描述了四种FP8类型格式。
FP8(8位浮点)是用于表示浮点数的数据类型之一。在FP8中,每个数字由8个数据位表示,通常分为三个部分:符号、指数和尾数。这种格式提供了准确性和存储效率之间的平衡,使其对于需要内存和计算效率的应用程序具有吸引力。
ID |
描述 |
---|---|
FLOAT_FP8_E4M3FN |
8位浮点数,4位指数,3位尾数。通常用作系数。 |
FLOAT_FP8_E4M3FNUZ |
8位浮点数,4位指数,3位尾数。支持NaN,不支持负零和Inf。通常用作系数。 |
FLOAT_FP8_E5M2FN |
8位浮点数,5位指数,2位尾数。支持NaN和Inf。通常用于渐变。 |
FLOAT_FP8_E5M2FNUZ |
8位浮点数,5位指数,2位尾数。支持NaN,不支持负零和Inf。也用于渐变。 |
FP8的主要优势之一是其处理大型数据集的效率。通过采用紧凑型数字表示法,FP8减少了内存需求并加速了计算。这对于经常处理大型数据集的机器学习和人工智能应用程序尤其重要。