Autoconversão de valores de entrada e saída ao executar modelos ONNX

Na versão atual do ONNX em MQL5 como valores do tipo input/output são suportados apenas tensores, que são matrizes de dados com um dos seguintes tipos de elementos:

Tipo ONNX

Em conformidade com o tipo 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

 

Como valores do tipo input/output no modelo ONNX só é possível transferir matrizes, vetores ou matrizes (Dados).

Se o tipo de parâmetro passado não corresponder ao tipo de parâmetro do modelo ONNX e se o sinalizador OnnxRun não for especificado ao chamar ONNX_NO_CONVERSION, será usada a autoconversão. A autoconversão implica que, antes de executar o modelo ONNX, os dados do usuário Dadosserão copiados para os sensores ONNX com conversão.

Ao executar um modelo ONNX sem autoconversão, o modelo ONNX é calculado em Dados sem nenhuma cópia adicional.

ADVERTÊNCIA!A autoconversão não controla o truncamento, portanto, deve-se tomar cuidado com os dados e tipos de dados que são passados para o modelo ONNX.

A autoconversão é compatível com os seguintes tipos de 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

Tipos não suportados:

  • ONNX_DATA_TYPE_BFLOAT16
  • ONNX_DATA_TYPE_STRING

 

Regras de autoconversão por tipos de tensor

Se o tipo MQL5 não estiver entre os tipos suportados pelo modelo, o modelo ONNX será encerrado com o erro ERR_ONNX_NOT_SUPPORTED (código de erro 5802).

Nota: durante a autoconversão, o tipo color é processado como uint e o tipo datetime é processado como long.

 

Autoconversão de valores input

Tipo ONNX (tipo de elemento tensor)

Tipo MQL5, suportado pela autoconversão

ONNX_DATA_TYPE_BOOL

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

 

Ao converter elementos de Dados é verificado por uma comparação simples de zero a zero.

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

Veja. ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_INT8

Veja. ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_UINT16

Veja. ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_INT16

Veja. ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_INT32

Veja. ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_INT64

Veja. ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_DOUBLE

Veja. ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_UINT32

Veja. ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_UINT64

Veja. ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_COMPLEX64

complex

ONNX_DATA_TYPE_COMPLEX128

complex

 

Autoconversão de valores output

Tipo ONNX (tipo de elemento tensor)

Tipo MQL5, suportado pela autoconversão

ONNX_DATA_TYPE_BOOL

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

 

Se um elemento do tensor for zero, o elemento Dados será definido como 0; caso contrário, será definido como 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

Veja. ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_INT8

Veja. ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_UINT16

Veja. ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_INT16

Veja. ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_INT32

Veja. ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_INT64

Veja. ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_DOUBLE

Veja. ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_UINT32

Veja. ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_UINT64

Veja. ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_COMPLEX64

complex

ONNX_DATA_TYPE_COMPLEX128

complex

 

Veja também

Coerção de tipos