Conversion automatique des valeurs d'entrée et de sortie lors de l'exécution de modèles ONNX

La version actuelle d'ONNX dans MQL5 ne prend en charge que les tenseurs pour les valeurs d'entrée/sortie. Les tenseurs sont des tableaux de données avec les éléments des types de données suivants :

Type ONNX

Correspond au type 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  

 

Seuls les tableaux, vecteurs et matrices (nous les appellerons Données) peuvent être alimentés dans les modèles ONNX en tant que valeurs d'entrée/sortie.

Si les types de paramètres ne correspondent pas au type de paramètre du modèle ONNX et que OnnxRun est appelé sans le flag ONNX_NO_CONVERSION, la conversion automatique des données sera appliquée. L'autoconversion implique qu'avant d'exécuter un modèle ONNX, les données de l'utilisateur seront copiées dans les tenseurs ONNX avec la conversion appropriée.

Lorsqu'un modèle ONNX est exécuté sans l'autoconversion, le modèle sera calculé à l'aide des Données sans aucune copie supplémentaire.

IMPORTANT ! L'autoconversion ne contrôle pas le débordement (troncature), vous devez donc surveiller attentivement les données et les types de données entrés dans le modèle ONNX.

La conversion automatique prend en charge les types ONNX suivants :

  • 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

Types non supportés :

  • ONNX_DATA_TYPE_BFLOAT16
  • ONNX_DATA_TYPE_STRING

 

Règles d'Autoconversion par Types de Tensor

Si le type MQL5 n'est pas inclus dans la liste des types pris en charge par le modèle, l'exécution du modèle ONNX renverra l'erreur ERR_ONNX_NOT_SUPPORTED (code d'erreur 5802).

Remarque : lors de la conversion automatique, le type color est traité comme uint, tandis que datetime est traité comme long .

 

Conversion automatique des valeurs d'entrée

Type ONNX (type d'élément tenseur)

Type MQL5 pris en charge par la conversion automatique

ONNX_DATA_TYPE_BOOL

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

 

Lors de la conversion, les Données sont vérifiées par une simple comparaison avec 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

Voir ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_INT8

Voir ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_UINT16

Voir ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_INT16

Voir ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_INT32

Voir ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_INT64

Voir ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_DOUBLE

Voir ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_UINT32

Voir ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_UINT64

Voir ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_COMPLEX64

complex

ONNX_DATA_TYPE_COMPLEX128

complex

 

Autoconversion des valeurs de sortie

Type ONNX (type d'élément tenseur)

Type MQL5 pris en charge par la conversion automatique

ONNX_DATA_TYPE_BOOL

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

 

Si l'élément tenseur est zéro, alors l'élément Data est mis à 0 ; sinon, la valeur est 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

Voir ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_INT8

Voir ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_UINT16

Voir ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_INT16

Voir ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_INT32

Voir ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_INT64

Voir ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_DOUBLE

Voir ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_UINT32

Voir ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_UINT64

Voir ONNX_DATA_TYPE_FLOAT

ONNX_DATA_TYPE_COMPLEX64

complex

ONNX_DATA_TYPE_COMPLEX128

complex

 

Voir également

Conversion de Type