OnnxRun

Ausführen eines ONNX-Modells.

bool  OnnxRun(
   long    onnx_handle,  // ONNX-Sitzungshandle
   ulong   flags,        // Flags, die den Laufmodus beschreiben
   ...                   // Eingänge und Ausgänge des Modells
   );

Parameter

onnx_handle

[in]  Handle des Objekts der ONNX-Sitzung von OnnxCreate oder OnnxCreateFromBuffer.

flags

[in] Die Flags aus ENUM_ONNX_FLAGS, die den Ausführungsmodus beschreiben: ONNX_DEBUG_LOGS und ONNX_NO_CONVERSION.

...

[in] [out]  Eingänge und Ausgänge des Modells.

Gibt bei Erfolg true zurück, andernfalls false. Um den Fehler-Code zu erhalten, rufen Sie die Funktion GetLastError auf.

ENUM_ONNX_FLAGs

ID

Beschreibung

ONNX_DEBUG_LOGS

Ausgabe der Debugging-Logs

ONNX_NO_CONVERSION

Automatische Konvertierung deaktivieren, Nutzerdaten so verwenden, wie sie sind

ONNX_COMMON_FOLDER  

Laden einer Modelldatei aus dem Ordner Common\Files; der Wert ist gleich dem Flag FILE_COMMON

 

Beispiel:

const long                             ExtOutputShape[] = {1,1};    // Form der Modellausgänge
const long                             ExtInputShape [] = {1,10,4}; // Form der Modelleingänge
#resource "Python/model.onnx" as uchar ExtModel[]                   // Modell als Resource
//+------------------------------------------------------------------+
//| Skript Programm Start Funktion                                   |
//+------------------------------------------------------------------+
int OnStart(void)
  {
   matrix rates;
//--- Abrufen von 10 Balken
   if(!rates.CopyRates("EURUSD",PERIOD_H1,COPY_RATES_OHLC,2,10))
      return(-1);
//--- Eingang einer Reihe von OHLC-Vektoren
   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);
//--- die Normalisierungsmatrizen ausfüllen
   for(int i=0i<10i++)
     {
      mm.Row(m,i);
      ms.Row(s,i);
     }
//--- Normalisieren der Eingangsdaten
   x_norm-=mm;
   x_norm/=ms;
//--- Modell erstellen
   long handle=OnnxCreateFromBuffer(ExtModel,ONNX_DEBUG_LOGS);
//--- Die Form der Eingangsdaten spezifizieren
   if(!OnnxSetInputShape(handle,0,ExtInputShape))
     {
      Print("OnnxSetInputShape failed, error ",GetLastError());
      OnnxRelease(handle);
      return(-1);
     }
//--- Spezifikation der Form der Ausgangsdaten
   if(!OnnxSetOutputShape(handle,0,ExtOutputShape))
     {
      Print("OnnxSetOutputShape failed, error ",GetLastError());
      OnnxRelease(handle);
      return(-1);
     }
//--- konvertieren der normalisierten Eingänge in den Type float
   matrixf x_normf;
   x_normf.Assign(x_norm);
//--- hier die Ausgangsdaten des Modells abrufen, d. h. die Preisvorhersage
   vectorf y_norm(1);
//--- Ausführen des Modells
   if(!OnnxRun(handle,ONNX_DEBUG_LOGS | ONNX_NO_CONVERSION,x_normf,y_norm))
     {
      Print("OnnxRun failed, error ",GetLastError());
      OnnxRelease(handle);
      return(-1);
     }
//--- Ausdrucken der Ausgangswerte des Modells in das Protokoll
   Print(y_norm);
//--- die Rücktransformation durchführen, um den voraussichtlichen Preis zu erhalten
   double y_pred=y_norm[0]*s[3]+m[3];
   Print("price predicted:",y_pred);
//--- abgeschlossene Operation
   OnnxRelease(handle);
   return(0);
  };

Siehe auch

OnnxSetInputShape, OnnxSetOutputShape