Veri Yapıları

ONNX modelleriyle çalışmak için aşağıdaki veri yapıları kullanılır:

OnnxTypeInfo #

Yapı, ONNX modelinin girdi veya çıktı parametresinin türünü tanımlar.

struct OnnxTypeInfo
 {
  ENUM_ONNX_TYPE        type;          // parametre türü
  OnnxTensorTypeInfo    tensor;        // tensör tanımı
  OnnxMapTypeInfo       map;           // harita tanımı
  OnnxSequenceTypeInfo  sequence;      // sekans tanımı
 };

Girdi olarak yalnızca tensör (ONNX_TYPE_TENSOR) kullanılabilir. Bu durumda, yalnızca OnnxTypeInfo::tensor alanı değerlerle doldurulur, diğer alanlar (harita ve sekans) tanımlanmaz.

Üç OnnxTypeInfo türünden (ONNX_TYPE_TENSOR, ONNX_TYPE_MAP veya ONNX_TYPE_SEQUENCE) yalnızca biri girdi olarak kullanılabilir. Türe bağlı olarak ilgili altyapı (OnnxTypeInfo::tensor, OnnxTypeInfo::map veya OnnxTypeInfo::sequence) doldurulur.

 

OnnxTensorTypeInfo

Yapı, ONNX modelinin girdi veya çıktı parametresindeki tensörü tanımlar.

struct OnnxTensorTypeInfo
 {
  const ENUM_ONNX_DATA_TYPE  data_type;      // tensördeki veri türü
  const long                 dimensions[];   // tensördeki eleman sayısı
 };

OnnxMapTypeInfo #

Yapı, ONNX modelinin çıktı parametresinde elde edilen haritayı tanımlar.

struct OnnxMapTypeInfo
 {
  const ENUM_ONNX_DATA_TYPE   key_type;      // anahtar türü
  const OnnxTypeInfo&         value_type;    // değer türü
 };

OnnxSequenceTypeInfo #

Yapı, ONNX modelinin çıktı parametresinde elde edilen sekansı tanımlar.

struct OnnxSequenceTypeInfo
 {
  const OnnxTypeInfo        value_type;     // sekanstaki veri türü
 };

 

 

ENUM_ONNX_TYPE #

ENUM_ONNX_TYPE numaralandırması, model parametresinin türünü tanımlar.

Kimlik

Açıklama

ONNX_TYPE_UNKNOWN

Bilinmeyen

ONNX_TYPE_TENSOR

Tensör

ONNX_TYPE_SEQUENCE

Sekans

ONNX_TYPE_MAP

Harita

ONNX_TYPE_OPAQUE

Soyut (opak)

ONNX_TYPE_SPARSETENSOR

Seyrek tensör

ENUM_ONNX_DATA_TYPE #

ENUM_ONNX_DATA_TYPE numaralandırması, kullanılan veri türünü tanımlar.

Kimlik

Açıklama

ONNX_DATA_TYPE_UNDEFINED

Tanımsız

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

ONNX_DATA_TYPE_COMPLEX128

128-bit complex

ONNX_DATA_TYPE_BFLOAT16

16-bit bfloat (Brain Floating Point)

ENUM_ONNX_FLAGS #

ENUM_ONNX_FLAGS numaralandırması, modelin çalışma modunu tanımlar.

Kimlik

Açıklama

ONNX_DEBUG_LOGS

Hata ayıklama günlüklerini yazdırır

ONNX_NO_CONVERSION

Otomatik dönüştürmeyi devre dışı bırakır, kullanıcı verilerini olduğu gibi kullanır

ONNX_COMMON_FOLDER  

Common\Files klasöründen model dosyası yükler; değer, FILE_COMMON bayrağına eşittir

 

ONNX modelleriyle çalışırken dizi dönüştürme

Makine öğrenimi görevleri her zaman daha yüksek hesaplama doğruluğu gerektirmez. Hesaplamaları hızlandırmak için bazı modeller Float16 ve hatta Float8 gibi daha düşük hassasiyetli veri türleri kullanır. Kullanıcıların ilgili verileri modellere girebilmelerini sağlamak için MQL5, standart MQL5 türlerini özel FP16 ve FP8 türlerine dönüştüren dört özel fonksiyon sağlar.

Fonksiyon

Eylem

ArrayToFP16

float veya double türündeki bir diziyi istenilen formatta ushort türünde bir diziye kopyalar

ArrayToFP8

float veya double türündeki bir diziyi istenilen formatta uchar türünde bir diziye kopyalar

ArrayFromFP16

ushort türündeki bir diziyi istenilen formatta float veya double türünde bir diziye kopyalar

ArrayFromFP8

uchar türündeki bir diziyi istenilen formatta float veya double türünde bir diziye kopyalar

Bu dizi dönüştürme fonksiyonları aşağıdaki numaralandırmalarda belirtilen özel formatları kullanır.

ENUM_FLOAT16_FORMAT #

ENUM_FLOAT16_FORMAT numaralandırması iki FP16 format türü tanımlar.

Kimlik

Açıklama

FLOAT_FP16

Half olarak da bilinen standart 16 bit format

FLOAT_BFP16

Özel brain float point formatı

Bu formatların her birinin avantajları ve sınırlamaları vardır. FLOAT16 daha yüksek doğruluk sağlar ancak daha fazla depolama ve hesaplama kaynağı gerektirir. BFLOAT16 ise veri işlemede daha yüksek performans ve verimlilik sağlar, ancak daha az doğruluk sergileyebilir.

ENUM_FLOAT8_FORMAT #

ENUM_FLOAT8_FORMAT numaralandırması dört FP8 format türü tanımlar.

FP8 (8-bit floating point), ondalıklı sayıları temsil etmek için kullanılan veri türlerinden biridir. FP8'de her sayı 8 veri biti ile temsil edilir ve tipik olarak üç bileşene ayrılır: işaret, üs ve mantis. Bu format, doğruluk ve depolama verimliliği arasında bir denge sunarak bellek ve hesaplama verimliliği gerektiren uygulamalar için ideal hale gelir.  

Kimlik

Açıklama

FLOAT_FP8_E4M3FN

8 bit ondalıklı sayı, üs için 4 bit ve mantis için 3 bit. Genellikle katsayı olarak kullanılır.

FLOAT_FP8_E4M3FNUZ

8 bit ondalıklı sayı, üs için 4 bit ve mantis için 3 bit. NaN'ı destekler, negatif sıfır ve Inf'i desteklemez. Genellikle katsayı olarak kullanılır.

FLOAT_FP8_E5M2FN

8 bit ondalıklı sayı, üs için 5 bit ve mantis için 2 bit. NaN ve Inf'i destekler. Genellikle gradyanlar için kullanılır.

FLOAT_FP8_E5M2FNUZ

8 bit ondalıklı sayı, üs için 5 bit ve mantis için 2 bit. NaN'ı destekler, negatif sıfır ve Inf'i desteklemez. Genellikle gradyanlar için kullanılır.

FP8'in en önemli avantajlarından biri, büyük veri kümelerini işlemedeki verimliliğidir. FP8, kompakt sayı temsili kullanarak bellek gereksinimlerini azaltır ve hesaplamaları hızlandırır. Bu, özellikle genellikle büyük veri kümelerini işleyen makine öğrenimi ve yapay zeka uygulamalarında önemlidir.