OnnxRun

Esegue un modello ONNX.

bool  OnnxRun(
 long   onnx_handle,  // handle sessione ONNX
 ulong  flags,        // flag che descrive la modalità di esecuzione
   ...                // ingressi e uscite del modello
   );

Parametri

onnx_handle

[in] Handle ONNX dell'oggetto della sessione creato tramite OnnxCreate o OnnxCreateFromBuffer.

flags

[in] Flag da ENUM_ONNX_FLAGS che descrive la modalità di esecuzione: ONNX_DEBUG_LOGS e ONNX_NO_CONVERSION.

...

[in] [out] Ingressi e uscite del modello.

Restituisce true in caso di successo o false altrimenti. Per ottenere il codice errore, chiamare la funzione GetLastError.

ENUM_ONNX_FLAGS

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

 

Esempio:

const long                             ExtOutputShape[] = {1,1};    // dimensione del modello d'uscita
const long                             ExtInputShape [] = {1,10,4}; // forma del modello d'ingresso
#resource "Python/model.onnx" as uchar ExtModel[]                   // modello come risorsa
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
int OnStart(void)
  {
   matrix rates;
//-- ottenere 10 barre
   if(!rates.CopyRates("EURUSD",PERIOD_H1,COPY_RATES_OHLC,2,10))
      return(-1);
//---inserire un insieme di vettori 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);
//-- riempire le matrici di normalizzazione
   for(int i=0i<10i++)
     {
      mm.Row(m,i);
      ms.Row(s,i);
     }
//-- normalizzare i dati d'ingresso
   x_norm-=mm;
   x_norm/=ms;
//-- creare il modello
   long handle=OnnxCreateFromBuffer(ExtModel,ONNX_DEBUG_LOGS);
//-- specificare la dimensione dei dati d'ingresso
   if(!OnnxSetInputShape(handle,0,ExtInputShape))
     {
      Print("OnnxSetInputShape failed, error ",GetLastError());
      OnnxRelease(handle);
      return(-1);
     }
//-- specificare la dimensione dei dati d'uscita
   if(!OnnxSetOutputShape(handle,0,ExtOutputShape))
     {
      Print("OnnxSetOutputShape failed, error ",GetLastError());
      OnnxRelease(handle);
      return(-1);
     }
//-- convertire i dati d'ingresso normalizzati in tipo float
   matrixf x_normf;
   x_normf.Assign(x_norm);
//-- ottenere i dati d'uscita del modello qui, cioè la previsione dei prezzi
   vectorf y_norm(1);
//-- eseguire il modello
   if(!OnnxRun(handle,ONNX_DEBUG_LOGS | ONNX_NO_CONVERSION,x_normf,y_norm))
     {
      Print("OnnxRun failed, error ",GetLastError());
      OnnxRelease(handle);
      return(-1);
     }
//-- stampa il valore di uscita del modello nel log
   Print(y_norm);
//-- fare la trasformazione inversa per ottenere il prezzo previsto
   double y_pred=y_norm[0]*s[3]+m[3];
   Print("price predicted:",y_pred);
//-- operazione completata
   OnnxRelease(handle);
   return(0);
  };

Vedi anche

OnnxSetInputShape, OnnxSetOutputShape