データ構造体

ONNXモデルでの操作には次のデータ構造が使用されます。

OnnxTypeInfo #

この構造体は、ONNXモデルの入力または出力パラメータの型を記述します

struct OnnxTypeInfo
{
ENUM_ONNX_TYPE       type;         // パラメータ型
OnnxTensorTypeInfo   tensor;       // テンソルの説明
OnnxMapTypeInfo       map;           // マップの説明
OnnxSequenceTypeInfo sequence;     // シーケンスの説明
};

テンソル(ONNX_TYPE_TENSOR)のみを入力として使用できます。この場合、OnnxTypeInfo::tensorフィールドのみに値が入力され、他のフィールドmapとsequence)は定義されていません。

3 つのOnnxTypeInfo型(ONNX_TYPE_TENSOR、ONNX_TYPE_MAP、ONNX_TYPE_SEQUENCE)のうち1つだけを入力として使用できます。対応する部分構造(OnnxTypeInfo::tensor、OnnxTypeInfo::map、OnnxTypeInfo::sequence)は、型に応じて埋められます。

 

OnnxTensorTypeInfo

構造体は、ONNXモデルの入力または出力パラメータのテンソルを記述します

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

不明

ONNX_TYPE_TENSOR

テンソル

ONNX_TYPE_SEQUENCE

シークエンス

ONNX_TYPE_MAP

マップ

ONNX_TYPE_OPAQUE

抽象(不透明)

ONNX_TYPE_SPARSETENSOR

スパーステンソル

ENUM_ONNX_DATA_TYPE #

ENUM_ONNX_DATA_TYPE列挙は使用されるデータの型を記述します

ID

説明

ONNX_DATA_TYPE_UNDEFINED

未定義

ONNX_DATA_TYPE_FLOAT

float

ONNX_DATA_TYPE_INT8

8ビットint

ONNX_DATA_TYPE_UINT16

16ビットuint

ONNX_DATA_TYPE_INT16

16ビットint

ONNX_DATA_TYPE_INT32

32ビットint

ONNX_DATA_TYPE_INT64

64ビットint

ONNX_DATA_TYPE_STRING

string

ONNX_DATA_TYPE_BOOL

bool

ONNX_DATA_TYPE_FLOAT16

16ビットfloat

ONNX_DATA_TYPE_DOUBLE

double

ONNX_DATA_TYPE_UINT32

32ビットuint

ONNX_DATA_TYPE_UINT64

64ビットuint

ONNX_DATA_TYPE_COMPLEX64

64ビット複素数

ONNX_DATA_TYPE_COMPLEX128

128ビット複素数

ONNX_DATA_TYPE_BFLOAT16

16ビットbfloat(Brain Floating Point)

ENUM_ONNX_FLAGS #

ENUM_ONNX_FLAGS列挙はモデルの実行モードを記述します

ID

説明

ONNX_DEBUG_LOGS

出力デバッグログ

ONNX_NO_CONVERSION

自動変換を無効にし、ユーザーデータをそのまま使用します

ONNX_COMMON_FOLDER  

Common\Filesフォルダからモデルファイルを読み込みます。値はFILE_COMMONフラグと同じです。

 

ONNXモデルを使用する場合の配列変換

機械学習タスクでは、必ずしも高い計算精度が必要なわけではありません。計算を高速化するために、一部のモデルではFloat16やFloat8などの低精度のデータ型を使用します。ユーザーが関連データをモデルに入力できるようにするために、MQL5は、標準のMQL5型を特別なFP16型およびFP8型に変換する4つの特別な関数を提供します。

関数

アクション

ArrayToFP16

float型またはdouble型の配列を、指定された形式のushort型の配列にコピーします

ArrayToFP8

float型またはdouble型の配列を、指定された形式のuchar型の配列にコピーします

ArrayFromFP16

ushort型の配列を、指定された形式のfloat型またはdouble型の配列にコピーします

ArrayFromFP8

uchar型の配列を、指定された形式のfloat型またはdouble型の配列にコピーします

これらの配列変換関数は、以下の列挙で指定された特別な形式を使用します。

ENUM_FLOAT16_FORMAT #

ENUM_FLOAT16_FORMAT列挙では2つのFP16型形式が説明されています。

ID

説明

FLOAT_FP16

標準16ビット形式(ハーフとも呼ばれる)

FLOAT_BFP16

特別なbf16浮動小数点形式

これらの形式にはそれぞれ利点と制限があります。FLOAT16は精度が高くなりますが、より多くのストレージと計算リソースを必要とします。一方、BFLOAT16はデータ処理のパフォーマンスと効率が高くなりますが、精度が劣る可能性があります。

ENUM_FLOAT8_FORMAT #

ENUM_FLOAT8_FORMAT列挙では4つのFP8型形式が説明されています。

FP8(8ビット浮動小数点)は、浮動小数点数を表すために使用されるデータ型の1つです。FP8では、各数値は8データビットで表され、通常は符号、指数、仮数の3つの要素に分割されます。この形式は精度とストレージ効率のバランスが取れているため、メモリと計算効率を必要とするアプリケーションにとって魅力的です。  

ID

説明

FLOAT_FP8_E4M3FN

8ビット浮動小数点数、指数部に4ビット、仮数部に3ビット。通常は係数として使用されます。

FLOAT_FP8_E4M3FNUZ

8ビット浮動小数点数、指数部に4ビット、仮数部に3ビット。NaNをサポートしますが、負のゼロとInfはサポートしません。通常は係数として使用されます。

FLOAT_FP8_E5M2FN

8ビット浮動小数点数、指数部に5ビット、仮数部に2ビット。NaNとInfをサポートします。通常は勾配に使用されます。

FLOAT_FP8_E5M2FNUZ

8ビット浮動小数点数、指数部に5ビット、仮数部に2ビット。NaNをサポートしますが、負のゼロとInfはサポートしません。勾配に使用されます。

FP8の主な利点の1つは、大規模なデータセットの処理効率です。FP8はコンパクトな数値表現を採用することにより、メモリ要件を削減し、計算を高速化します。これは、大規模なデータセットを処理することが多い機械学習および人工知能アプリケーションでは特に重要です。