OnnxRun

Exécute un modèle ONNX.

bool  OnnxRun(
   long    onnx_handle,  // handle de session ONNX
   ulong   flags,        // flags décrivant le mode d'exécution
   ...                   // entrées et sorties du modèle
   );

Paramètres

onnx_handle

[in]  Descripteur d'objet de session ONNX créé via OnnxCreate ou OnnxCreateFromBuffer.

flags

[in] Indicateurs de ENUM_ONNX_FLAGS décrivant le mode d'exécution : ONNX_DEBUG_LOGS et ONNX_NO_CONVERSION.

...

[in] [out]  Entrées et sorties du modèle.

Renvoie true en cas de succès ou false sinon. Pour obtenir le code d'erreur, appelez la fonction GetLastError.

ENUM_ONNX_FLAGS

ID

Description

ONNX_DEBUG_LOGS

Journaux de débogage de sortie

ONNX_NO_CONVERSION

Désactive la conversion automatique, utiliser les données utilisateur telles quelles

ONNX_COMMON_FOLDER  

Charge un fichier de modèle à partir du dossier Common\Files ; la valeur est égale au drapeau FILE_COMMON

 

Exemple :

const long                             ExtOutputShape[] = {1,1};    // forme de sortie du modèle
const long                             ExtInputShape [] = {1,10,4}; // forme d'entrée du modèle
#resource "Python/model.onnx" as uchar ExtModel[]                   // modèle en tant que ressource
//+------------------------------------------------------------------+
//| Fonction de démarrage du programme                               |
//+------------------------------------------------------------------+
int OnStart(void)
  {
   matrix rates;
//--- récupère 10 barres
   if(!rates.CopyRates("EURUSD",PERIOD_H1,COPY_RATES_OHLC,2,10))
      return(-1);
//--- saisie d'un ensemble de vecteurs OHLC
   matrix x_norm=rates.Transpose();
   vector m=x_norm.Mean(0);               
   vector s=x_norm.Std(0);
   matrix mm(10,4);
   matrix ms(10,4);
//--- remplissage des matrices de normalisation
   for(int i=0i<10i++)
     {
      mm.Row(m,i);
      ms.Row(s,i);
     }
//--- normalisation des données d'entrée
   x_norm-=mm;
   x_norm/=ms;
//--- crée le modèle
   long handle=OnnxCreateFromBuffer(ExtModel,ONNX_DEBUG_LOGS);
//--- spécifie la forme des données d'entrée
   if(!OnnxSetInputShape(handle,0,ExtInputShape))
     {
      Print("Echec de OnnxSetInputShape, erreur ",GetLastError());
      OnnxRelease(handle);
      return(-1);
     }
//--- spécifie la forme des données de sortie
   if(!OnnxSetOutputShape(handle,0,ExtOutputShape))
     {
      Print("Echec de OnnxSetOutputShape, erreur ",GetLastError());
      OnnxRelease(handle);
      return(-1);
     }
//--- convertit les données d'entrée normalisées en type flottant
   matrixf x_normf;
   x_normf.Assign(x_norm);
//--- récupère les données de sortie du modèle ici, c'est-à-dire la prévision de prix
   vectorf y_norm(1);
//--- exécute le modèle
   if(!OnnxRun(handle,ONNX_DEBUG_LOGS | ONNX_NO_CONVERSION,x_normf,y_norm))
     {
      Print("Echec de OnnxRun, erreur ",GetLastError());
      OnnxRelease(handle);
      return(-1);
     }
//--- affiche la valeur de sortie du modèle dans le journal
   Print(y_norm);
//--- effectue la transformation inverse pour obtenir le prix prédit
   double y_pred=y_norm[0]*s[3]+m[3];
   Print("prix prédit :",y_pred);
//--- opération terminée
   OnnxRelease(handle);
   return(0);
  };

Voir également

OnnxSetInputShape, OnnxSetOutputShape