Conversione automatica dei valori d'ingresso e d'uscita durante l'esecuzione di modelli ONNX

L'attuale versione ONNX in MQL5 supporta solo tensori per valori ingresso/uscita. I tensori sono array di dati con gli elementi dei seguenti tipi di dati:

Tipo ONNX

Corrisponde al 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  

 

Solo gli array, vettori e matrici (ci riferiremo a loro come Data) possono essere inseriti nei modelli ONNX come valori di ingresso/uscita.

Se i tipi di parametro non corrispondono al tipo di parametro del modello ONNX e viene chiamata OnnxRun senza il flag ONNX_NO_CONVERSION specificato, verrà applicata la conversione automatica dei dati. L'autoconversione implica che prima di eseguire un modello ONNX, l'operatore Data verrà copiato nei tensori ONNX con la relativa conversione.

Quando un modello ONNX viene eseguito senza autoconversione, il modello verrà calcolato utilizzando Data senza alcuna copia aggiuntiva.

IMPORTANTE! L'autoconversione non controlla l'overflow (troncare), pertanto è necessario monitorare attentamente i dati e i tipi di dati immessi nel modello ONNX.

L'autoconversione supporta i seguenti tipi 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

Tipi non supportati:

  • ONNX_DATA_TYPE_BFLOAT16
  • ONNX_DATA_TYPE_STRING

 

Regole di Autoconversione per Tipi di Tensori

Se il tipo MQL5 non è incluso nella lista dei tipi supportati dal modello, l'esecuzione del modello ONNX restituirà l'errore ERR_ONNX_NOT_SUPPORTED (codice errore 5802).

Nota: Durante l'autoconversione, il tipo color viene processato come uint, mentre datetime viene processato come long.

 

Autoconversione dei valori in ingresso

Tipo ONNX (tipo elemento tensore)

Tipo MQL5 supportato da autoconversione

ONNX_DATA_TYPE_BOOL

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

 

Durante la conversione, gli elementi Data sono controllati da un semplice confronto con 0

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

Vedere ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_INT8

Vedere ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_UINT16

Vedere ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_INT16

Vedere ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_INT32

Vedere ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_INT64

Vedere ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_DOUBLE

Vedere ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_UINT32

Vedere ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_UINT64

Vedere ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_COMPLEX64

complex

ONNX_DATA_TYPE_COMPLEX128

complex

 

Autoconversione dei valori in uscita

Tipo ONNX (tipo elemento tensore)

Tipo MQL5 supportato da autoconversione

ONNX_DATA_TYPE_BOOL

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

 

Se l'elemento tensore è zero, l'elemento Data è impostato su 0; altrimenti il valore è 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

Vedere ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_INT8

Vedere ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_UINT16

Vedere ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_INT16

Vedere ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_INT32

Vedere ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_INT64

Vedere ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_DOUBLE

Vedere ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_UINT32

Vedere ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_UINT64

Vedere ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_COMPLEX64

complex

ONNX_DATA_TYPE_COMPLEX128

complex

 

Vedi anche

Type Casting