데이터 구조
다음 데이터 구조는 ONNX 모델 작업에 사용됩니다:
OnnxTypeInfo #
구조는 ONNX 모델의 input또는output parameter의 유형을 설명합니다.
struct OnnxTypeInfo |
텐서(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)는 유형에 따라 채워집니다.
구조는 다음의 텐서를 설명합니다. ONNX 모델의 input또는output parameter
struct OnnxTensorTypeInfo |
OnnxMapTypeInfo #
구조는 ONNX 모델의 출력 매개변수에서 얻은 지도를 설명합니다.
struct OnnxMapTypeInfo |
OnnxSequenceTypeInfo #
구조는 ONNX 모델의 출력 매개변수에서 얻은 시퀀스를 설명합니다.
struct OnnxSequenceTypeInfo |
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 유형으로 변환하는 네 가지 특수 함수를 제공합니다.
함수 | 액션 |
|---|---|
float 또는 double 유형의 배열을 주어진 형식의 ushort 유형의 배열에 복사합니다 | |
float 또는 double 유형의 배열을 지정된 형식의 uchar 유형의 배열에 복사합니다 | |
ushort 유형의 배열을 주어진 형식의 float 또는 double 유형의 배열로 복사합니다 | |
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은 간결한 숫자 표현을 사용하여 메모리의 양을 줄이고 계산을 가속화합니다. 이는 대규모 데이터 세트를 자주 처리하는 기계 학습 및 인공 지능 애플리케이션에서 특히 중요합니다.