次の方法で共有


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畳み込みフィルター テンソルの下位次元です。 また、この値は、StridesDilationsStartPaddingEndPadding 配列のサイズも決定します。 サポートされている値は 2 のみです。

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 制約

  • BiasTensorFilterTensorInputTensor、および 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