- ONNX Unterstützung
- Format-Konvertierung
- Automatische Konvertierung von Datentypen
- Erstellen eines Modells
- Ausführung eines Modells
- Ausführen im Strategy Tester
- OnnxCreate
- OnnxCreateFromBuffer
- OnnxRelease
- OnnxRun
- OnnxGetInputCount
- OnnxGetOutputCount
- OnnxGetInputName
- OnnxGetOutputName
- OnnxGetInputTypeInfo
- OnnxGetOutputTypeInfo
- OnnxSetInputShape
- OnnxSetOutputShape
- Datenstrukturen
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
|
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.
Die Struktur beschreibt tensor durch die Eingangs-oder Ausgangsparameter eines ONNX-Modells
struct OnnxTensorTypeInfo
|
OnnxMapTypeInfo #
Die Struktur beschreibt die im Ausgangsparameter eines ONNX-Modells erhaltene Map
struct OnnxMapTypeInfo
|
OnnxSequenceTypeInfo #
Die Struktur beschreibt die im Ausgangsparameter eines ONNX-Modells erhaltene Sequenz
struct OnnxSequenceTypeInfo
|
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 |
---|---|
Kopiert ein Array vom Typ float oder double in ein Array vom Typ ushort mit dem angegebenen Format |
|
Kopiert ein Array vom Typ float oder double in ein Array vom Typ uchar mit dem angegebenen Format |
|
Kopiert ein Array vom Typ ushort in ein Array vom Typ float oder double mit dem angegebenen Format |
|
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.