- Supporto ONNX
- Conversione Di Formato
- Conversione automatica del tipo di dati
- Creazione di un Modello
- Esecuzione di un modello
- Eseguire nello Strategy Tester
- OnnxCreate
- OnnxCreateFromBuffer
- OnnxRelease
- OnnxRun
- OnnxGetInputCount
- OnnxGetOutputCount
- OnnxGetInputName
- OnnxGetOutputName
- OnnxGetInputTypeInfo
- OnnxGetOutputTypeInfo
- OnnxSetInputShape
- OnnxSetOutputShape
- Strutture dati
Strutture dati
Le seguenti strutture dati sono utilizzate per operazioni con modelli ONNX:
OnnxTypeInfo #
La struttura descrive il tipo di un ingresso o parametro d'uscita di un modello ONNX
struct OnnxTypeInfo
|
Solo il tensore (ONNX_TYPE_TENSOR) può essere usato come ingresso. In questo caso, solo il campo OnnxTypeInfo::tensor è riempito con valori, mentre gli altri campi (mappa e sequenza) non sono definiti.
Solo uno dei tre tipi OnnxTypeInfo (ONNX_TYPE_TENSOR, ONNX_TYPE_MAP o ONNX_TYPE_SEQUENCE) può essere utilizzato come ingresso. La sottostruttura corrispondente (OnnxTypeInfo::tensor, OnnxTypeInfo::map o OnnxTypeInfo::sequence) viene riempita a seconda del tipo.
La struttura descrive il tensore in ingresso o parametro d'uscita di un modello ONNX
struct OnnxTensorTypeInfo
|
OnnxMapTypeInfo #
La struttura descrive la mappa ottenuta nel parametro d'uscita di un modello ONNX
struct OnnxMapTypeInfo
|
OnnxSequenceTypeInfo #
La struttura descrive la sequenza ottenuta nel parametro d'uscita di un modello ONNX
struct OnnxSequenceTypeInfo
|
ENUM_ONNX_TYPE #
L'enumerazione ENUM_ONNX_TYPE definisce il tipo di parametro di un modello
ID |
Descrizione |
---|---|
ONNX_TYPE_UNKNOWN |
Sconosciuto |
ONNX_TYPE_TENSOR |
Tensore |
ONNX_TYPE_SEQUENCE |
Sequenza |
ONNX_TYPE_MAP |
Mappa |
ONNX_TYPE_OPAQUE |
Astratto (opaco) |
ONNX_TYPE_SPARSETENSOR |
Tensore sparso |
ENUM_ONNX_DATA_TYPE #
L'enumerazione >ENUM_ONNX_DATA_TYPE definisce il tipo di dati usato
ID |
Descrizione |
---|---|
ONNX_DATA_TYPE_UNDEFINED |
Non definito |
ONNX_DATA_TYPE_FLOAT |
float |
ONNX_DATA_TYPE_INT8 |
int 8-bit |
ONNX_DATA_TYPE_UINT16 |
uint 16-bit |
ONNX_DATA_TYPE_INT16 |
int 16-bit |
ONNX_DATA_TYPE_INT32 |
int 32-bit |
ONNX_DATA_TYPE_INT64 |
int 64-bit |
ONNX_DATA_TYPE_STRING |
string |
ONNX_DATA_TYPE_BOOL |
bool |
ONNX_DATA_TYPE_FLOAT16 |
float 16-bit |
ONNX_DATA_TYPE_DOUBLE |
double |
ONNX_DATA_TYPE_UINT32 |
uint 32-bit |
ONNX_DATA_TYPE_UINT64 |
uint 64-bit |
ONNX_DATA_TYPE_COMPLEX64 |
numeri complessi a 64-bit |
ONNX_DATA_TYPE_COMPLEX128 |
numeri complessi a 128-bit |
ONNX_DATA_TYPE_BFLOAT16 |
bfloat 16-bit (Brain Floating Point) |
ENUM_ONNX_FLAGS #
L'enumerazione ENUM_ONNX_FLAGS definisce la modalità di esecuzione del modello
ID |
Descrizione |
---|---|
ONNX_DEBUG_LOGS |
Log di debug di output |
ONNX_NO_CONVERSION |
Disattiva la conversione automatica, utilizza i dati dell'utente come sono |
ONNX_COMMON_FOLDER |
Carica un file modello dalla cartella Common\Files; il valore è uguale a FILE_COMMON flag |
Conversione di array quando si lavora con i modelli ONNX
I compiti di apprendimento automatico non richiedono sempre una grande precisione computazionale. Per accelerare i calcoli, alcuni modelli utilizzano tipi di dati di precisione inferiore come Float16 e persino Float8. Per consentire agli utenti di inserire i dati rilevanti nei modelli, MQL5 fornisce quattro funzioni speciali che convertono i tipi standard MQL5 in tipi speciali FP16 e FP8.
Funzione |
Azione |
---|---|
Copia un array di tipo float o double in un array di tipo ushort con il formato specificato |
|
Copia un array di tipo float o double in un array di tipo uchar con il formato specificato |
|
Copia un array di tipo ushort in un array di tipo float o double con il formato specificato |
|
Copia un array di tipo uchar in un array di tipo float o double con il formato specificato |
Queste funzioni di conversione degli array utilizzano formati speciali specificati nelle enumerazioni seguenti.
ENUM_FLOAT16_FORMAT #
L'enumerazione ENUM_FLOAT16_FORMAT descrive due formati di tipo FP16.
ID |
Descrizione |
---|---|
FLOAT_FP16 |
Formato standard a 16 bit, noto anche come half |
FLOAT_BFP16 |
Formato speciale brain float point |
Ognuno di questi formati ha i suoi vantaggi e limitazioni. FLOAT16 fornisce una maggiore precisione, ma richiede più risorse di archiviazione e di calcolo. BFLOAT16, d'altra parte, fornisce maggiori prestazioni ed efficienza nell'elaborazione dei dati, ma può essere meno accurata.
ENUM_FLOAT8_FORMAT #
L'enumerazione ENUM_FLOAT8_FORMAT descrive quattro formati di tipo FP8.
FP8 (8-bit floating point) è uno dei tipi di dati utilizzati per rappresentare i numeri in virgola mobile. In FP8, ogni numero è rappresentato da 8 bit di dati, tipicamente divisi in tre componenti: segno, esponente e mantissa. Questo formato offre un equilibrio tra precisione ed efficienza di archiviazione, rendendolo attraente per le applicazioni che richiedono memoria ed efficienza computazionale.
ID |
Descrizione |
---|---|
FLOAT_FP8_E4M3FN |
Numero in virgola mobile a 8 bit, 4 bit per l'esponente e 3 bit per la mantissa. Tipicamente utilizzato come coefficiente. |
FLOAT_FP8_E4M3FNUZ |
Numero in virgola mobile a 8 bit, 4 bit per l'esponente e 3 bit per la mantissa. Supporta Nan, non supporta zero negativo e Inf. Tipicamente utilizzato come coefficiente. |
FLOAT_FP8_E5M2FN |
Numero in virgola mobile a 8 bit, 5 bit per l'esponente e 2 bit per la mantissa. Supporta Nan e Inf. Tipicamente utilizzato per i gradienti. |
FLOAT_FP8_E5M2FNUZ |
Numero in virgola mobile a 8 bit, 5 bit per l'esponente e 2 bit per la mantissa. Supporta Nan, non supporta zero negativo e Inf. Utilizzato anche per i gradienti. |
Uno dei principali vantaggi di FP8 è la sua efficienza nell'elaborazione di grandi set di dati. Con l'impiego della rappresentazione numerica compatta, FP8 riduce i requisiti di memoria e accelera i calcoli. Ciò è particolarmente importante nelle applicazioni di apprendimento automatico e di intelligenza artificiale che spesso elaborano grandi set di dati.