OnnxRun

ONNX 모델을 실행.

bool  OnnxRun(
   long    onnx_handle,  // ONNX 세션 핸들
   ulong   flags,        // 실행 모드를 설명하는 플래그
   ...                   // 모델의 입력과 출력
   );

패러미터

onnx_handle

[in]  다음을 통해 생성된 ONNX session 객체 핸들 OnnxCreate or OnnxCreateFromBuffer.

flags

【in】 ENUM_ONNX_FLAGS의 플래그로 실행 모드를 설명: ONNX_DEBUG_LOGS 및 ONNX_NO_CONVERSION.

...

[in] [out]  모델 입력과 출력.

성공하면 true를 반환하고 그렇지 않으면 false를 반환. error 코드를 얻기 위해서는 GetLastError 함수를 호출합니다.

ENUM_ONNX_FLAGS

ID

설명

ONNX_DEBUG_LOGS

디버그 로그 출력

ONNX_NO_CONVERSION

자동 변환을 비활성화하고 사용자 데이터를 그대로 사용

ONNX_COMMON_FOLDER  

Common\Files 폴더에서 모델 파일을 로드합니다; 값은FILE_COMMON flag와 같습니다.

 

예:

const long                             ExtOutputShape[] = {1,1};    // 모델 출력 쉐이프
const long                             ExtInputShape [] = {1,10,4}; // 모델 입력 폼
#resource "Python/model.onnx" as uchar ExtModel[]                   // 자원으로서의 모델
/+------------------------------------------------------------------+
//| 프로그램 시작 함수 스크립트                                 |
/+------------------------------------------------------------------+
int OnStart(void)
  {
   matrix rates;
//--- 10개 바
   if(!rates.CopyRates("EURUSD",PERIOD_H1,COPY_RATES_OHLC,2,10))
      return(-1);
//--- 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);
//--- 정규화 행렬을 채움
   for(int i=0i<10i++)
     {
      mm.Row(m,i);
      ms.Row(s,i);
     }
//--- 입력 데이터 정규화
   x_norm-=mm;
   x_norm/=ms;
//--- 모델 생성
   long handle=OnnxCreateFromBuffer(ExtModel,ONNX_DEBUG_LOGS);
//--- 입력 데이터의 쉐이프 지정
   if(!OnnxSetInputShape(handle,0,ExtInputShape))
     {
      Print("OnnxSetInputShape failed, error ",GetLastError());
      OnnxRelease(handle);
      return(-1);
     }
//--- 출력 데이터의 쉐이프 지정
   if(!OnnxSetOutputShape(handle,0,ExtOutputShape))
     {
      Print("OnnxSetOutputShape failed, error ",GetLastError());
      OnnxRelease(handle);
      return(-1);
     }
//--- 정규화된 입력 데이터를 부동 소수점 유형으로 변환
   matrixf x_normf;
   x_normf.Assign(x_norm);
//--- 여기에서 모델의 출력 데이터 예를 들어 가격 예측을 얻습니다.
   vectorf y_norm(1);
//--- 모델 실행
   if(!OnnxRun(handle,ONNX_DEBUG_LOGS | ONNX_NO_CONVERSION,x_normf,y_norm))
     {
      Print("OnnxRun failed, error ",GetLastError());
      OnnxRelease(handle);
      return(-1);
     }
//--- 모델의 출력 값을 로그에 출력
   Print(y_norm);
//--- 역변환을 수행하여 예상 가격을 얻습니다.
   double y_pred=y_norm[0]*s[3]+m[3];
   Print("price predicted:",y_pred);
//--- 완료된 작업
   OnnxRelease(handle);
   return(0);
  };

더 참조할 만한 내용

OnnxSetInputShape, OnnxSetOutputShape