Автоконвертация input и output значений при запуске ONNX моделей

В текущей версии ONNX в языке MQL5 в качестве input/output значений поддерживаются только тензоры — массивы данных с одним из следующих типов для элементов:

Тип ONNX

Соответствует типу MQL5

ONNX_DATA_TYPE_BOOL

bool

ONNX_DATA_TYPE_FLOAT

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

double

ONNX_DATA_TYPE_UINT32

uint

ONNX_DATA_TYPE_UINT64

ulong

ONNX_DATA_TYPE_COMPLEX64

ONNX_DATA_TYPE_COMPLEX128

complex

ONNX_DATA_TYPE_BFLOAT16

ONNX_DATA_TYPE_STRING

 

В качестве input/output значений в ONNX модели можно передавать только массивы, вектора или матрицы (далее Данные).

Если тип переданного параметра не соответствует типу параметру ONNX модели и при вызове OnnxRun не указан флаг ONNX_NO_CONVERSION, будет использована автоконвертация. Автоконвертация означает, что перед выполнением ONNX модели пользовательские Данные будут скопированы в ONNX-тензоры c конвертацией.

При запуске ONNX модели без автоконвертации ONNX модель расчитывается на Данных без какого либо дополнительного копирования.

ВАЖНО! Автоконвертация не контролирует переполнение (truncate), поэтому следует внимательно следить за данными и их типами, которые передаются в 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.

 

Автоконвертация input значений

Тип ONNX (тип элемента тензора)

Тип MQL5, поддерживаемый автоконвертацией

ONNX_DATA_TYPE_BOOL

bool, char, uchar, short, ushort, int, color, uint, datetime, long, folat, double, complex

 

При конвертации элементы Данных проверяются простым сравнением на ноль

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

complex

ONNX_DATA_TYPE_COMPLEX128

complex

 

Автоконвертация output значений

Тип ONNX (тип элемента тензора)

Тип MQL5, поддерживаемый автоконвертацией

ONNX_DATA_TYPE_BOOL

bool, char, uchar, short, ushort, int, color, uint, datetime, long, folat, double, complex

 

Если элемент тензора ноль, то элементу Данных выставляется значение 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

complex

ONNX_DATA_TYPE_COMPLEX128

complex

 

Смотри также

Приведение типов