DML_QUANTIZED_LINEAR_CONVOLUTION_OPERATOR_DESC構造体 (directml.h)
InputTensorを使用して、FilterTensor の畳み込みを実行します。 この演算子は、量子化されたデータに対して前方畳み込みを実行します。 この演算子は、数学的には、入力のデカンタイズ、コンボルブ、出力の量子化に相当します。
この演算子で使用される量子化線形関数は、線形量子化関数です。
デカンタイズ関数
f(Input, Scale, ZeroPoint) = (Input - ZeroPoint) * Scale
クオンタイズ関数
f(Input, Scale, ZeroPoint) = clamp(round(Input / Scale) + ZeroPoint, Min, Max)
構文
struct DML_QUANTIZED_LINEAR_CONVOLUTION_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
const DML_TENSOR_DESC *InputScaleTensor;
const DML_TENSOR_DESC *InputZeroPointTensor;
const DML_TENSOR_DESC *FilterTensor;
const DML_TENSOR_DESC *FilterScaleTensor;
const DML_TENSOR_DESC *FilterZeroPointTensor;
const DML_TENSOR_DESC *BiasTensor;
const DML_TENSOR_DESC *OutputScaleTensor;
const DML_TENSOR_DESC *OutputZeroPointTensor;
const DML_TENSOR_DESC *OutputTensor;
UINT DimensionCount;
const UINT *Strides;
const UINT *Dilations;
const UINT *StartPadding;
const UINT *EndPadding;
UINT GroupCount;
};
メンバーズ
InputTensor
型: const DML_TENSOR_DESC*
入力データを含むテンソル。
InputTensor の予想されるディメンションが { InputBatchCount, InputChannelCount, InputHeight, InputWidth }
。
InputScaleTensor
型: const DML_TENSOR_DESC*
入力スケール データを含むテンソル。
InputScaleTensor
の予想される寸法が { 1, 1, 1, 1 }
。 このスケール値は、入力値をデカンタイズするために使用されます。
手記
スケール値が 0 の場合、未定義の動作になります。
InputZeroPointTensor
型: _Maybenull_ const DML_TENSOR_DESC*
入力ゼロ ポイント データを含む省略可能なテンソル。
InputZeroPointTensor の予想されるディメンションが { 1, 1, 1, 1 }
。 このゼロポイント値は、入力値をデカンタイズするために使用されます。
FilterTensor
型: const DML_TENSOR_DESC*
フィルター データを含むテンソル。
FilterTensor の予想されるディメンションが { FilterBatchCount, FilterChannelCount, FilterHeight, FilterWidth }
。
FilterScaleTensor
型: const DML_TENSOR_DESC*
フィルター スケール データを含むテンソル。 テンソル量子化が必要な場合は、FilterScaleTensor
の予想される次元が { 1, 1, 1, 1 }
されます。チャネル単位の量子化が必要な場合は { 1, OutputChannelCount, 1, 1 }
。 このスケール値は、フィルター値をデカンタイズするために使用されます。
手記
スケール値が 0 の場合、未定義の動作になります。
FilterZeroPointTensor
型: _Maybenull_ const DML_TENSOR_DESC*
フィルターのゼロ ポイント データを含む省略可能なテンソル。 テンソル単位量子化が必要な場合は、FilterZeroPointTensor の予想されるディメンションが { 1, 1, 1, 1 }
されます。チャネル単位の量子化が必要な場合は { 1, OutputChannelCount, 1, 1 }
されます。 このゼロ ポイント値は、フィルター値をデカンタイズするために使用されます。
BiasTensor
型: _Maybenull_ const DML_TENSOR_DESC*
バイアス データを含むテンソル。 バイアステンソルは、結果に追加される畳み込みの終了時に出力テンソル全体でブロードキャストされるデータを含むテンソルです。 BiasTensor の予想される寸法は、4D に対して { 1, OutputChannelCount, 1, 1 }
されます。
OutputScaleTensor
型: const DML_TENSOR_DESC*
出力スケール データを含むテンソル。 OutputScaleTensor の予想されるディメンションが { 1, 1, 1, 1 }
。 この入力スケール値は、畳み込み出力値を量子化するために使用されます。
手記
スケール値が 0 の場合、未定義の動作になります。
OutputZeroPointTensor
型: _Maybenull_ const DML_TENSOR_DESC*
フィルターのゼロ ポイント データを含む省略可能なテンソル。 OutputZeroPointTensor の予想されるディメンションが { 1, 1, 1, 1 }
。 この入力ゼロポイント値は、出力値の畳み込みを量子化するために使用されます。
OutputTensor
型: const DML_TENSOR_DESC*
結果を書き込むテンソル。 OutputTensor の予想されるディメンションが { OutputBatchCount, OutputChannelCount, OutputHeight, OutputWidth }
。
DimensionCount
型: UINT
畳み込み操作の空間ディメンションの数。 空間ディメンションは、FilterTensor
Strides
型: _Field_size_(DimensionCount) const UINT*
畳み込み操作のストライド。 これらのストライドは畳み込みフィルターに適用されます。 これらは、DML_TENSOR_DESCに含まれるテンソルストライドとは別です。
Dilations
型: _Field_size_(DimensionCount) const UINT*
畳み込み操作の拡張。 拡張は、フィルター カーネルの要素に適用されるストライドです。 これは、内部フィルター カーネル要素にゼロを埋め込むことで、より大きなフィルター カーネルをシミュレートする効果があります。
StartPadding
型: _Field_size_(DimensionCount) const UINT*
フィルターの各空間ディメンションの先頭と畳み込み操作の入力テンソルに適用される埋め込み値。
EndPadding
型: _Field_size_(DimensionCount) const UINT*
畳み込み操作のフィルターと入力テンソルの各空間ディメンションの末尾に適用される埋め込み値。
GroupCount
型: UINT
畳み込み操作を分割するグループの数。 GroupCount を使用して、GroupCount 入力チャネル数と同じ値を設定することで、深さ方向の畳み込みを実現できます。 これにより、畳み込みを入力チャネルごとに個別の畳み込み値に分割します。
可用性
この演算子は、DML_FEATURE_LEVEL_2_1
で導入されました。
Tensor 制約
BiasTensor 、FilterTensor 、InputTensor 、および OutputTensorは、同じ DimensionCount である必要があります。OutputTensor と OutputZeroPointTensorは、同じ DataType を持っている必要があります。- InputTensor
と InputZeroPointTensor は、同じ DataType を持つ必要があります。 FilterTensor と FilterZeroPointTensorは、同じ DataType を持つ必要があります。
Tensor のサポート
DML_FEATURE_LEVEL_5_2以降
テンソル | 種類 | サポートされているディメンション数 | サポートされているデータ型 |
---|---|---|---|
InputTensor | インプット | 3 ~ 4 | INT8、UINT8 |
InputScaleTensor | インプット | 1 ~ 4 | FLOAT32 |
InputZeroPointTensor | 省略可能な入力 | 1 ~ 4 | INT8、UINT8 |
FilterTensor | インプット | 3 ~ 4 | INT8、UINT8 |
FilterScaleTensor | インプット | 1 ~ 4 | FLOAT32 |
FilterZeroPointTensor | 省略可能な入力 | 1 ~ 4 | INT8、UINT8 |
BiasTensor | 省略可能な入力 | 3 ~ 4 | INT32 |
OutputScaleTensor | インプット | 1 ~ 4 | FLOAT32 |
OutputZeroPointTensor | 省略可能な入力 | 1 ~ 4 | INT8、UINT8 |
OutputTensor | アウトプット | 3 ~ 4 | INT8、UINT8 |
DML_FEATURE_LEVEL_4_0以上
テンソル | 種類 | サポートされているディメンション数 | サポートされているデータ型 |
---|---|---|---|
InputTensor | インプット | 3 ~ 4 | INT8、UINT8 |
InputScaleTensor | インプット | 1 ~ 4 | FLOAT32 |
InputZeroPointTensor | 省略可能な入力 | 1 ~ 4 | INT8、UINT8 |
FilterTensor | インプット | 3 ~ 4 | INT8、UINT8 |
FilterScaleTensor | インプット | 3 ~ 4 | FLOAT32 |
FilterZeroPointTensor | 省略可能な入力 | 1 ~ 4 | INT8、UINT8 |
BiasTensor | 省略可能な入力 | 3 ~ 4 | INT32 |
OutputScaleTensor | インプット | 1 ~ 4 | FLOAT32 |
OutputZeroPointTensor | 省略可能な入力 | 1 ~ 4 | INT8、UINT8 |
OutputTensor | アウトプット | 3 ~ 4 | INT8、UINT8 |
DML_FEATURE_LEVEL_2_1以降
テンソル | 種類 | サポートされているディメンション数 | サポートされているデータ型 |
---|---|---|---|
InputTensor | インプット | 4 | INT8、UINT8 |
InputScaleTensor | インプット | 4 | FLOAT32 |
InputZeroPointTensor | 省略可能な入力 | 4 | INT8、UINT8 |
FilterTensor | インプット | 4 | INT8、UINT8 |
FilterScaleTensor | インプット | 4 | FLOAT32 |
FilterZeroPointTensor | 省略可能な入力 | 4 | INT8、UINT8 |
BiasTensor | 省略可能な入力 | 4 | INT32 |
OutputScaleTensor | インプット | 4 | FLOAT32 |
OutputZeroPointTensor | 省略可能な入力 | 4 | INT8、UINT8 |
OutputTensor | アウトプット | 4 | INT8、UINT8 |
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 10 ビルド 20348 |
サポートされる最小サーバー | Windows 10 ビルド 20348 |
ヘッダー | directml.h |