데이터 구조

다음 데이터 구조는 ONNX 모델 작업에 사용됩니다:

OnnxTypeInfo #

구조는 ONNX 모델의 input또는output parameter의 유형을 설명합니다.

struct OnnxTypeInfo
 {
  ENUM_ONNX_TYPE        type;          // 매개변수 타입
  OnnxTensorTypeInfo    tensor;        // 텐서 설명
  OnnxMapTypeInfo      map;            // 지도 설명
  OnnxSequenceTypeInfo  sequence;      // 시퀀스 설명
 };

텐서(ONNX_TYPE_TENSOR)만 input으로 사용할 수 있습니다. 이 경우 OnnxTypeInfo::tensor 필드만 값들로 채워지고 다른 필드(map 및 sequence)는 정의되지 않습니다.

세 가지 OnnxTypeInfo 유형(ONNX_TYPE_TENSOR, ONNX_TYPE_MAP 또는 ONNX_TYPE_SEQUENCE) 중 하나만 input으로 사용할 수 있습니다. 해당 하위 구조(OnnxTypeInfo::tensor, OnnxTypeInfo::map 또는 OnnxTypeInfo::sequence)는 유형에 따라 채워집니다.

 

OnnxTensorTypeInfo

구조는 다음의 텐서를 설명합니다. ONNX 모델의 input또는output parameter

struct OnnxTensorTypeInfo
 {
  const ENUM_ONNX_DATA_TYPE  data_type;      // 텐서에서 데이터 타입
  const long                 dimensions[];   // 텐서에서 요소의 수
 };

OnnxMapTypeInfo #

구조는 ONNX 모델의 출력 매개변수에서 얻은 지도를 설명합니다.

struct OnnxMapTypeInfo
 {
  const ENUM_ONNX_DATA_TYPE  key_type;      // 키 타입
  const OnnxTypeInfo&        value_type;    // 값 타입
 };

OnnxSequenceTypeInfo #

구조는 ONNX 모델의 출력 매개변수에서 얻은 시퀀스를 설명합니다.

struct OnnxSequenceTypeInfo
 {
  const OnnxTypeInfo &       value_type;      //시퀀스에서 데이터 타입
 };

 

 

ENUM_ONNX_TYPE #

ENUM_ONNX_TYPE 열거형은 모델 매개변수의 유형에 대해 설명합니다.

ID

설명

ONNX_TYPE_UNKNOWN

Unknown

ONNX_TYPE_TENSOR

Tensor

ONNX_TYPE_SEQUENCE

Sequence

ONNX_TYPE_MAP

Map

ONNX_TYPE_OPAQUE

Abstract (opaque)

ONNX_TYPE_SPARSETENSOR

Sparse tensor

ENUM_ONNX_DATA_TYPE #

ENUM_ONNX_DATA_TYPE 열거형은 사용된 데이터 유형에 대해 설명합니다.

ID

설명

ONNX_DATA_TYPE_UNDEFINED

Undefined

ONNX_DATA_TYPE_FLOAT

float

ONNX_DATA_TYPE_INT8

8-bit int

ONNX_DATA_TYPE_UINT16

16-bit uint

ONNX_DATA_TYPE_INT16

16-bit int

ONNX_DATA_TYPE_INT32

32-bit int

ONNX_DATA_TYPE_INT64

64-bit int

ONNX_DATA_TYPE_STRING

string

ONNX_DATA_TYPE_BOOL

bool

ONNX_DATA_TYPE_FLOAT16

16-bit float

ONNX_DATA_TYPE_DOUBLE

double

ONNX_DATA_TYPE_UINT32

32-bit uint

ONNX_DATA_TYPE_UINT64

64-bit uint

ONNX_DATA_TYPE_COMPLEX64

64-bit complex number

ONNX_DATA_TYPE_COMPLEX128

128-bit complex number

ONNX_DATA_TYPE_BFLOAT16

16-bit bfloat (Brain Floating Point)

ENUM_ONNX_FLAGS #

ENUM_ONNX_FLAGS 열거는 모델 실행 모드에 대해 설명합니다.

ID

설명

ONNX_DEBUG_LOGS

디버그 로그 출력

ONNX_NO_CONVERSION

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

ONNX_COMMON_FOLDER  

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

 

ONNX 모델 작업할 때 배열 변환

머신 러닝 작업에 항상 더 높은 계산 정확도가 필요한 것은 아닙니다. 계산 속도를 높이기 위해 일부 모델은 Float16 및 심지어 Float8과 같은 정밀도가 낮은 데이터 유형을 사용하기도 합니다. 사용자가 관련 데이터를 모델에 입력할 수 있도록 MQL5는 표준 MQL5 유형을 특수 FP16 및 FP8 유형으로 변환하는 네 가지 특수 함수를 제공합니다.

함수

액션

ArrayToFP16

float 또는 double 유형의 배열을 주어진 형식의 ushort 유형의 배열에 복사합니다

ArrayToFP8

float 또는 double 유형의 배열을 지정된 형식의 uchar 유형의 배열에 복사합니다

ArrayFromFP16

ushort 유형의 배열을 주어진 형식의 float 또는 double 유형의 배열로 복사합니다

ArrayFromFP8

uchar 유형의 배열을 지정된 형식의 float 또는 double 유형의 배열로 복사합니다

이러한 배열 변환 함수는 아래 열거에 지정된 특수 형식을 사용합니다.

ENUM_FLOAT16_FORMAT #

ENUM_FLOAT16_FORMAT 열거형은 두 가지 FP16 유형 형식을 설명합니다.

ID

설명

FLOAT_FP16

표준 16비트 형식, half라고도 함

FLOAT_BFP16

특수 브레인 부동 소수점 형식

이러한 각 형식에는 장점과 제한 사항이 있습니다. FLOAT16은 더 높은 정확도를 제공하지만 더 많은 저장 공간과 계산 리소스가 필요합니다. 반면 BFLOAT16은 데이터 처리에 더 높은 성능과 효율성을 제공하지만 정확도가 떨어질 수 있습니다.

ENUM_FLOAT8_FORMAT #

ENUM_FLOAT8_FORMAT 열거형은 네 가지 FP8 유형 형식을 설명합니다.

FP8(8비트 부동 소수점)은 부동 소수점 자리를 나타내는 데 사용되는 데이터 유형 중 하나입니다. FP8에서 각 숫자는 8개의 데이터 비트로 표시되며 일반적으로 부호, 지수 및 가수의 세 가지 구성 요소로 나뉩니다. 이 형식은 정확성과 저장 효율성 사이의 균형을 제공하므로 메모리 용량과 계산 효율성이 필요한 애플리케이션에 적합합니다.  

ID

설명

FLOAT_FP8_E4M3FN

8비트 부동 소수점 자리 숫자, 지수용 4비트, 가수용 3비트. 일반적으로 계수로 사용됩니다.

FLOAT_FP8_E4M3FNUZ

8비트 부동 소수점 자리 숫자, 지수용 4비트, 가수용 3비트. NaN을 지원하고 음의 0과 Inf를 지원하지 않습니다. 일반적으로 계수로 사용됩니다.

FLOAT_FP8_E5M2FN

8비트 부동 소수점 숫자, 지수용 5비트, 가수용 2비트. NaN과 Inf 지원. 일반적으로 기울기에 사용

FLOAT_FP8_E5M2FNUZ

8비트 부동 소수점 숫자, 지수용 5비트, 가수용 2비트. NaN을 지원하고 음의 0과 Inf를 지원하지 않습니다. 기울기에도 사용.

FP8의 주요 장점 중 하나는 대규모 데이터 세트 처리의 효율성입니다. FP8은 간결한 숫자 표현을 사용하여 메모리의 양을 줄이고 계산을 가속화합니다. 이는 대규모 데이터 세트를 자주 처리하는 기계 학습 및 인공 지능 애플리케이션에서 특히 중요합니다.