DML_QUANTIZED_LINEAR_MATRIX_MULTIPLY_OPERATOR_DESC構造体 (directml.h)
量子化されたデータに対して行列乗算関数を実行します。 この演算子は、数学的には、入力をデカンタイズしてから行列乗算を実行し、出力を量子化することと同じです。
この演算子を使用するには、行列乗算入力テンソルを 4D に設定する必要があります。これは として { BatchCount, ChannelCount, Height, Width }
書式設定されます。 行列乗算演算子は、独立した行列乗算の BatchCount * ChannelCount 数を実行します。
たとえば、ATensor の{ BatchCount, ChannelCount, M, K }
サイズが で、BTensor のサイズが で{ BatchCount, ChannelCount, K, N }
、OutputTensor のサイズが の{ BatchCount, ChannelCount, M, N }
場合、行列乗算演算子は、ディメンション {M,K} x {K,N} = {M,N} の BatchCount * ChannelCount 独立行列乗算を実行します。
Dequantize 関数
f(Input, Scale, ZeroPoint) = (Input - ZeroPoint) * Scale
クオンタイズ関数
f(Input, Scale, ZeroPoint) = clamp(round(Input / Scale) + ZeroPoint, Min, Max)
構文
struct DML_QUANTIZED_LINEAR_MATRIX_MULTIPLY_OPERATOR_DESC {
const DML_TENSOR_DESC *ATensor;
const DML_TENSOR_DESC *AScaleTensor;
const DML_TENSOR_DESC *AZeroPointTensor;
const DML_TENSOR_DESC *BTensor;
const DML_TENSOR_DESC *BScaleTensor;
const DML_TENSOR_DESC *BZeroPointTensor;
const DML_TENSOR_DESC *OutputScaleTensor;
const DML_TENSOR_DESC *OutputZeroPointTensor;
const DML_TENSOR_DESC *OutputTensor;
};
メンバー
ATensor
型: const DML_TENSOR_DESC*
A データを含むテンソル。 このテンソルの次元は である { BatchCount, ChannelCount, M, K }
必要があります。
AScaleTensor
型: const DML_TENSOR_DESC*
ATensor スケール データを含むテンソル。 の予想される次元 AScaleTensor
は、 { 1, 1, 1, 1 }
テンソル量子化ごとが必要な場合、または { 1, 1, M, 1 }
行単位の量子化が必要な場合です。 これらのスケール値は、A 値をデカンタイズするために使用されます。
AZeroPointTensor
型: _Maybenull_ const DML_TENSOR_DESC*
ATensor ゼロ ポイント データを含む省略可能なテンソル。 AZeroPointTensor の予想される次元は、 { 1, 1, 1, 1 }
テンソル単位の量子化が必要な場合、または { 1, 1, M, 1 }
行単位の量子化が必要な場合です。 これらのゼロポイント値は、ATensor 値をデカンタイズするために使用されます。
BTensor
型: const DML_TENSOR_DESC*
B データを含むテンソル。 このテンソルの次元は である { BatchCount, ChannelCount, K, N }
必要があります。
BScaleTensor
型: const DML_TENSOR_DESC*
BTensor スケール データを含むテンソル。 の予想される次元 BScaleTensor
は、 { 1, 1, 1, 1 }
テンソル量子化が必要な場合、または { 1, 1, 1, N }
列単位の量子化が必要な場合です。 これらのスケール値は、 BTensor 値をデカンタイズするために使用されます。
BZeroPointTensor
型: _Maybenull_ const DML_TENSOR_DESC*
BTensor ゼロ ポイント データを含む省略可能なテンソル。 の予想される次元 BZeroPointTensor
は、 { 1, 1, 1, 1 }
テンソル量子化が必要な場合、または { 1, 1, 1, N }
列単位の量子化が必要な場合です。 これらのゼロ ポイント値は、 BTensor 値をデカンタイズするために使用されます。
OutputScaleTensor
型: const DML_TENSOR_DESC*
OutputTensor スケール データを含むテンソル。 の予想される次元 OutputScaleTensor
は、 { 1, 1, 1, 1 }
テンソル単位の量子化が必要な場合、または { 1, 1, M, 1 }
行ごとの量子化が必要な場合です。 このスケール値は、 OutputTensor 値をデカンタイズするために使用されます。
OutputZeroPointTensor
型: _Maybenull_ const DML_TENSOR_DESC*
OutputTensor ゼロ ポイント データを含む省略可能なテンソル。 の予想される次元 OutputZeroPointTensor
は、 { 1, 1, 1, 1 }
テンソル単位の量子化が必要な場合、または { 1, 1, M, 1 }
行ごとの量子化が必要な場合です。 このゼロ ポイント値は、 OutputTensor 値をデカンタイズするために使用されます。
OutputTensor
型: const DML_TENSOR_DESC*
結果を書き込むテンソル。 このテンソルのディメンションは です { BatchCount, ChannelCount, M, N }
。
可用性
この演算子は で DML_FEATURE_LEVEL_2_1
導入されました。
テンソル制約
- AScaleTensor、 AZeroPointTensor、 BScaleTensor、 BZeroPointTensor、 OutputScaleTensor、 および OutputZeroPointTensor は、同じ DimensionCount を持つ必要があります。
- ATensor、 BTensor、 および OutputTensor には、同じ DimensionCount が必要です。
- BTensor と BZeroPointTensor には、同じ DataType が必要です。
- OutputTensor と OutputZeroPointTensor には、同じ DataType が必要です。
- AScaleTensor、 AZeroPointTensor、 BScaleTensor、 BZeroPointTensor、 OutputScaleTensor、 および OutputZeroPointTensor は、同じ DimensionCount を持つ必要があります。
- ATensor と AZeroPointTensor には、同じ DataType が必要です。
Tensor のサポート
DML_FEATURE_LEVEL_4_0以上
テンソル | 種類 | サポートされているディメンション数 | サポートされるデータ型 |
---|---|---|---|
ATensor | 入力 | 2 から 4 | INT8、UINT8 |
AScaleTensor | 入力 | 1 から 4 | FLOAT32 |
AZeroPointTensor | 省略可能な入力 | 1 から 4 | INT8、UINT8 |
BTensor | 入力 | 2 から 4 | INT8、UINT8 |
BScaleTensor | 入力 | 1 から 4 | FLOAT32 |
BZeroPointTensor | 省略可能な入力 | 1 から 4 | INT8、UINT8 |
OutputScaleTensor | 入力 | 1 から 4 | FLOAT32 |
OutputZeroPointTensor | 省略可能な入力 | 1 から 4 | INT8、UINT8 |
OutputTensor | 出力 | 2 から 4 | INT8、UINT8 |
DML_FEATURE_LEVEL_2_1以上
テンソル | 種類 | サポートされているディメンション数 | サポートされるデータ型 |
---|---|---|---|
ATensor | 入力 | 4 | INT8、UINT8 |
AScaleTensor | 入力 | 4 | FLOAT32 |
AZeroPointTensor | 省略可能な入力 | 4 | INT8、UINT8 |
BTensor | 入力 | 4 | INT8、UINT8 |
BScaleTensor | 入力 | 4 | FLOAT32 |
BZeroPointTensor | 省略可能な入力 | 4 | INT8、UINT8 |
OutputScaleTensor | 入力 | 4 | FLOAT32 |
OutputZeroPointTensor | 省略可能な入力 | 4 | INT8、UINT8 |
OutputTensor | 出力 | 4 | INT8、UINT8 |
要件
サポートされている最小のクライアント | Windows 10 ビルド 20348 |
サポートされている最小のサーバー | Windows 10 ビルド 20348 |
Header | directml.h |