OnnxRun

Iniciar un modelo ONNX para su ejecución.

bool  OnnxRun(
   long    onnx_handle,  // manejador de la sesión ONNX
   ulong   flags,        // banderas que describen el modo de inicio
   ...                   // parámetros de entrada y salida del modelo
   );

Parámetros

onnx_handle

[in]  Manejador del objeto de sesión ONNX creado a través de OnnxCreate o OnnxCreateFromBuffer.

flags

[in] Las banderas ENUM_ONNX_FLAGS que describen el modo de inicio son ONNX_DEBUG_LOGS y ONNX_NO_CONVERSION.

...

[in] [out]  Parámetros de entrada y salida del modelo.

Si se ejecuta con éxito, retorna true, de lo contrario, false. Para obtener el código de error, llame a la función GetLastError.

ENUM_ONNX_FLAGS

Identificador

Descripción

ONNX_DEBUG_LOGS

Muestra de logs de depuración

ONNX_NO_CONVERSION

Prohibición de conversión automática, use los datos del usuario tal cual

ONNX_COMMON_FOLDER  

Carga del archivo del modelo desde la carpeta Common\Files, el valor es igual al indicador FILE_COMMON

 

Ejemplo:

const long                             ExtOutputShape[] = {1,1};    // formulario de datos de salida del modelo
const long                             ExtInputShape [] = {1,10,4}; // formulario de datos de entrada del modelo
#resource "Python/model.onnx" as uchar ExtModel[]                   // modelo en forma de recurso
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
int OnStart(void)
  {
   matrix rates;
//--- obtenemos 10 barras
   if(!rates.CopyRates("EURUSD",PERIOD_H1,COPY_RATES_OHLC,2,10))
      return(-1);
//--- suministramos a la entrada un conjunto de vectores 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);
//--- rellenamos las matrices de normalización
   for(int i=0i<10i++)
     {
      mm.Row(m,i);
      ms.Row(s,i);
     }
//--- normalizamos los datos de entrada
   x_norm-=mm;
   x_norm/=ms;
//--- creamos el modelo
   long handle=OnnxCreateFromBuffer(ExtModel,ONNX_DEBUG_LOGS);
//--- indicamos el formulario de los datos de entrada
   if(!OnnxSetInputShape(handle,0,ExtInputShape))
     {
      Print("OnnxSetInputShape failed, error ",GetLastError());
      OnnxRelease(handle);
      return(-1);
     }
//--- indicamos el formulario de los datos de salida
   if(!OnnxSetOutputShape(handle,0,ExtOutputShape))
     {
      Print("OnnxSetOutputShape failed, error ",GetLastError());
      OnnxRelease(handle);
      return(-1);
     }
//--- convertimos los datos de entrada normalizados al tipo float
   matrixf x_normf;
   x_normf.Assign(x_norm);
//--- aquí obtenemos los datos de entrada del modelo, el pronóstico del precio
   vectorf y_norm(1);
//--- iniciamos el modelo
   if(!OnnxRun(handle,ONNX_DEBUG_LOGS | ONNX_NO_CONVERSION,x_normf,y_norm))
     {
      Print("OnnxRun failed, error ",GetLastError());
      OnnxRelease(handle);
      return(-1);
     }
//--- mostramos en el log el valor de salida del modelo
   Print(y_norm);
//--- realizamos la conversión inversa para obtener el precio pronosticado
   double y_pred=y_norm[0]*s[3]+m[3];
   Print("price predicted:",y_pred);
//--- finalizamos el funcionamiento
   OnnxRelease(handle);
   return(0);
  };

Ver también

OnnxSetInputShape, OnnxSetOutputShape