Datenstrukturen

Die folgenden Datenstrukturen werden für die Operationen der ONNX-Modelle verwendet:

OnnxTypeInfo #

Die Struktur beschreibt den Typ eines Eingangs-oder Ausgangsparameter eines ONNX-Modells

struct OnnxTypeInfo
 {
  ENUM_ONNX_TYPE        type;          // Parametertyp
  OnnxTensorTypeInfo    tensor;        // Tensorbeschreibung
  OnnxMapTypeInfo       map;           // Map-Beschreibung
  OnnxSequenceTypeInfo  sequence;      // Sequenzbeschreibung
 };

Es kann nur ein Tensor (ONNX_TYPE_TENSOR) als Eingang verwendet werden. In diesem Fall wird nur das Feld OnnxTypeInfo::tensor mit Werten gefüllt, während die anderen Felder (Map und Sequenz) nicht definiert sind.

Es kann nur einer der drei OnnxTypeInfo-Typen (ONNX_TYPE_TENSOR, ONNX_TYPE_MAP oder ONNX_TYPE_SEQUENCE) als Eingang verwendet werden. Je nach Typ wird die entsprechende untergeordnete Struktur (OnnxTypeInfo::tensor, OnnxTypeInfo::map oder OnnxTypeInfo::sequence) gefüllt.

 

OnnxTensorTypeInfo

Die Struktur beschreibt tensor durch die Eingangs-oder Ausgangsparameter eines ONNX-Modells

struct OnnxTensorTypeInfo
 {
  const ENUM_ONNX_DATA_TYPE  data_type;      // Datentyp im Tensor
  const long                 dimensions[];   // Anzahl der Elemente im Tensor
 };

OnnxMapTypeInfo #

Die Struktur beschreibt die im Ausgangsparameter eines ONNX-Modells erhaltene Map

struct OnnxMapTypeInfo
 {
  const ENUM_ONNX_DATA_TYPE  key_type;       // Typ des Schlüssels
  const OnnxTypeInfo&        value_type;     // Typ der Werte
 };

OnnxSequenceTypeInfo #

Die Struktur beschreibt die im Ausgangsparameter eines ONNX-Modells erhaltene Sequenz

struct OnnxSequenceTypeInfo
 {
  const OnnxTypeInfo&       value_type;      // Datentyp in der Sequenz
 };

 

 

ENUM_ONNX_TYPE #

Die Enumeration ENUM_ONNX_TYPE beschreibt den Typ eines Modellparameters

ID

Beschreibung

ONNX_TYPE_UNKNOWN

Unbekannt

ONNX_TYPE_TENSOR

Tensor

ONNX_TYPE_SEQUENCE

Sequence

ONNX_TYPE_MAP

Map

ONNX_TYPE_OPAQUE

Abstrakt (opaque)

ONNX_TYPE_SPARSETENSOR

Sparse tensor

ENUM_ONNX_DATA_TYPE #

Die Enumeration ENUM_ONNX_DATA_TYPE beschreibt den Typ der verwendeten Daten

ID

Beschreibung

ONNX_DATA_TYPE_UNDEFINED

Undefiniert

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 komplexe Zahl

ONNX_DATA_TYPE_COMPLEX128

128-bit komplexe Zahl

ONNX_DATA_TYPE_BFLOAT16

16-bit bfloat (Brain Floating Point)

ENUM_ONNX_FLAGs #

Die Enumeration ENUM_ONNX_FLAGS beschreibt den Ausführungsmodus des Modells

ID

Beschreibung

ONNX_DEBUG_LOGS

Ausgabe der Debugging-Logs

ONNX_NO_CONVERSION

Automatische Konvertierung deaktivieren, Nutzerdaten so verwenden, wie sie sind

ONNX_COMMON_FOLDER  

Laden einer Modelldatei aus dem Ordner Common\Files; der Wert ist gleich dem Flag FILE_COMMON

 

Konvertierung von Arrays bei der Arbeit mit ONNX-Modellen

Aufgaben des maschinellen Lernens erfordern nicht immer eine höhere Rechengenauigkeit. Um die Berechnungen zu beschleunigen, verwenden einige Modelle Datentypen mit geringerer Genauigkeit wie Float16 und sogar Float8. Damit Nutzer die entsprechenden Daten in Modelle eingeben können, bietet MQL5 vier spezielle Funktionen, die die Standardtypen in MQL5 in die speziellen FP16- und FP8-Typen umwandeln.

Funktion

Aktion

ArrayToFP16

Kopiert ein Array vom Typ float oder double in ein Array vom Typ ushort mit dem angegebenen Format

ArrayToFP8

Kopiert ein Array vom Typ float oder double in ein Array vom Typ uchar mit dem angegebenen Format

ArrayFromFP16

Kopiert ein Array vom Typ ushort in ein Array vom Typ float oder double mit dem angegebenen Format

ArrayFromFP8

Kopiert ein Array vom Typ uchar in ein Array vom Typ float oder double mit dem angegebenen Format

Diese Array-Konvertierungsfunktionen verwenden spezielle Formate, die in den folgenden Enumerationen angegeben sind.

ENUM_FLOAT16_FORMAT #

Die Enumeration ENUM_FLOAT16_FORMAT beschreibt zwei FP16-Typenformate.

ID

Beschreibung

FLOAT_FP16

Standard 16-Bit-Format, auch bekannt als half (halb)

FLOAT_BFP16

Das spezielle Format brain float point

Jedes dieser Formate hat seine Vorteile und Einschränkungen. FLOAT16 bietet eine höhere Genauigkeit, erfordert aber mehr Speicher- und Rechenressourcen. BFLOAT16 hingegen bietet eine höhere Leistung und Effizienz bei der Datenverarbeitung, kann aber weniger genau sein.

ENUM_FLOAT8_FORMAT #

Die Enumeration ENUM_FLOAT8_FORMAT beschreibt vier FP8-Typenformate.

FP8 (8-Bit-floating point) ist einer der Datentypen, die zur Darstellung von Gleitkommazahlen verwendet werden. In FP8 wird jede Zahl durch 8 Datenbits dargestellt, die typischerweise in drei Komponenten unterteilt sind: Vorzeichen, Exponent und Mantisse. Dieses Format bietet ein Gleichgewicht zwischen Genauigkeit und Speichereffizienz und ist daher attraktiv für Anwendungen, die Speicher und Recheneffizienz erfordern.  

ID

Beschreibung

FLOAT_FP8_E4M3FN

8-Bit-Gleitkommazahl, 4 Bits für den Exponenten und 3 Bits für die Mantisse. Wird in der Regel als Koeffizient verwendet.

FLOAT_FP8_E4M3FNUZ

8-Bit-Gleitkommazahl, 4 Bits für den Exponenten und 3 Bits für die Mantisse. Unterstützt NaN, nicht unterstützt werden Negativ-Nullen und Inf. Wird in der Regel als Koeffizient verwendet.

FLOAT_FP8_E5M2FN

8-Bit-Gleitkommazahl, 5 Bits für den Exponenten und 2 Bits für die Mantisse. Unterstützt NaN und Inf. Wird in der Regel für Gradienten verwendet.

FLOAT_FP8_E5M2FNUZ

8-Bit-Gleitkommazahl, 5 Bits für den Exponenten und 2 Bits für die Mantisse. Unterstützt NaN, nicht unterstützt werden Negativ-Nullen und Inf. Wird auch für Gradienten verwendet.

Einer der Hauptvorteile von FP8 ist seine Effizienz bei der Verarbeitung großer Datenmengen. Durch die Verwendung einer kompakten Zahlendarstellung reduziert FP8 den Speicherbedarf und beschleunigt die Berechnungen. Durch die Verwendung einer kompakten Zahlendarstellung reduziert FP8 den Speicherbedarf und beschleunigt Berechnungen.