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_LOGLEVEL_VERBOSE

Registrar todos los mensajes

ONNX_LOGLEVEL_INFO

Registrar los mensajes informativos, advertencias y errores (esta bandera sustituye ONNX_DEBUG_LOGS)

ONNX_LOGLEVEL_WARNING

Registrar las advertencias y errores (por defecto)

ONNX_LOGLEVEL_ERROR

Registrar solo los errores

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

ONNX_USE_CPU_ONLY

Al ejecutar un modelo ONNX, usar solo la CPU

ONNX_GPU_DEVICE_0

Dispositivo CUDA con el número 0 (por defecto)

ONNX_GPU_DEVICE_1

Dispositivo CUDA con el número 1  *

ONNX_GPU_DEVICE_2

Dispositivo CUDA con el número 2  *

ONNX_GPU_DEVICE_3

Dispositivo CUDA con el número 3  *

ONNX_GPU_DEVICE_4

Dispositivo CUDA con el número 4  *

ONNX_GPU_DEVICE_5

Dispositivo CUDA con el número 5  *

ONNX_GPU_DEVICE_6

Dispositivo CUDA con el número 6  *

ONNX_GPU_DEVICE_7

Dispositivo CUDA con el número 7  *

ONNX_ENABLE_PROFILING

Activa el perfilado del modelo ONNX

* Las banderas como ONNX_GPU_DEVICE_N deben usarse en sistemas con dos o más GPU compatibles con CUDA. Si se especifican varias banderas de selección de GPU, se usará el dispositivo con el índice más bajo.

Si no se especifica un número de dispositivo, se realizará la selección automática.

 

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