- ONNXサポート
- フォーマット変換
- データ型の自動変換
- モデルの作成
- モデルの実行
- ストラテジーテスターでの実行
- OnnxCreate
- OnnxCreateFromBuffer
- OnnxRelease
- OnnxRun
- OnnxGetInputCount
- OnnxGetOutputCount
- OnnxGetInputName
- OnnxGetOutputName
- OnnxGetInputTypeInfo
- OnnxGetOutputTypeInfo
- OnnxSetInputShape
- OnnxSetOutputShape
- データ構造体
データ構造体
ONNXモデルでの操作には次のデータ構造が使用されます。
OnnxTypeInfo #
この構造体は、ONNXモデルの入力または出力パラメータの型を記述します
struct OnnxTypeInfo
|
テンソル(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)は、型に応じて埋められます。
構造体は、ONNXモデルの入力または出力パラメータのテンソルを記述します
struct OnnxTensorTypeInfo
|
OnnxMapTypeInfo #
この構造体は、ONNXモデルの出力パラメータで取得されるマップを記述します。
struct OnnxMapTypeInfo
|
OnnxSequenceTypeInfo #
この構造体は、ONNXモデルの出力パラメータで取得されるシークエンスを記述します。
struct OnnxSequenceTypeInfo
|
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つの特別な関数を提供します。
関数 |
アクション |
---|---|
float型またはdouble型の配列を、指定された形式のushort型の配列にコピーします |
|
float型またはdouble型の配列を、指定された形式のuchar型の配列にコピーします |
|
ushort型の配列を、指定された形式のfloat型またはdouble型の配列にコピーします |
|
uchar型の配列を、指定された形式のfloat型またはdouble型の配列にコピーします |
これらの配列変換関数は、以下の列挙で指定された特別な形式を使用します。
ENUM_FLOAT16_FORMAT #
ENUM_FLOAT16_FORMAT列挙では2つのFP16型形式が説明されています。
これらの形式にはそれぞれ利点と制限があります。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はコンパクトな数値表現を採用することにより、メモリ要件を削減し、計算を高速化します。これは、大規模なデータセットを処理することが多い機械学習および人工知能アプリケーションでは特に重要です。