Share via


DML_QUANTIZED_LINEAR_CONVOLUTION_OPERATOR_DESC-Struktur (directml.h)

Führt eine Konvolution des FilterTensor mit dem InputTensor aus. Dieser Operator führt Vorwärtskonvolution für quantisierte Daten aus. Dieser Operator entspricht mathematisch dem Dequantisieren der Eingaben, dem Konvolvieren und anschließenden Quantisieren der Ausgabe.

Die von diesem Operator verwendeten linearen Quantizefunktionen sind die linearen Quantisierungsfunktionen.

Dequantize-Funktion

f(Input, Scale, ZeroPoint) = (Input - ZeroPoint) * Scale

Quantize-Funktion

f(Input, Scale, ZeroPoint) = clamp(round(Input / Scale) + ZeroPoint, Min, Max)

Syntax

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;
};

Member

InputTensor

Typ: const DML_TENSOR_DESC*

Ein Tensor, der die Eingabedaten enthält. Die erwarteten Dimensionen des InputTensor sind { InputBatchCount, InputChannelCount, InputHeight, InputWidth }.

InputScaleTensor

Typ: const DML_TENSOR_DESC*

Ein Tensor, der die Eingabeskalierungsdaten enthält. Die erwarteten Dimensionen von InputScaleTensor sind { 1, 1, 1, 1 }. Dieser Skalierungswert wird zum Dequantisieren der Eingabewerte verwendet.

InputZeroPointTensor

Typ: _Maybenull_ const DML_TENSOR_DESC*

Ein optionaler Tensor, der die eingegebenen Nullpunktdaten enthält. Die erwarteten Dimensionen des InputZeroPointTensor sind { 1, 1, 1, 1 }. Dieser Nullpunktwert wird zum Dequantisieren der Eingabewerte verwendet.

FilterTensor

Typ: const DML_TENSOR_DESC*

Ein Tensor, der die Filterdaten enthält. Die erwarteten Dimensionen des FilterTensor sind { FilterBatchCount, FilterChannelCount, FilterHeight, FilterWidth }.

FilterScaleTensor

Typ: const DML_TENSOR_DESC*

Ein Tensor, der die Filterskalierungsdaten enthält. Die erwarteten Dimensionen von FilterScaleTensor sind { 1, 1, 1, 1 } , wenn eine Quantisierung pro Tensor erforderlich ist oder { 1, OutputChannelCount, 1, 1 } eine Quantisierung pro Kanal erforderlich ist. Dieser Skalierungswert wird zum Dequantisieren der Filterwerte verwendet.

FilterZeroPointTensor

Typ: _Maybenull_ const DML_TENSOR_DESC*

Ein optionaler Tensor, der die Filter-Nullpunktdaten enthält. Die erwarteten Dimensionen des FilterZeroPointTensor sind { 1, 1, 1, 1 } , wenn eine Quantisierung pro Tensor erforderlich ist oder { 1, OutputChannelCount, 1, 1 } eine Quantisierung pro Kanal erforderlich ist. Dieser Nullpunktwert wird zum Dequantisieren der Filterwerte verwendet.

BiasTensor

Typ: _Maybenull_ const DML_TENSOR_DESC*

Ein Tensor, der die Biasdaten enthält. Der Bias tensor ist ein Tensor mit Daten, der über den Ausgabe tensor am Ende der Konvolution übertragen wird, die dem Ergebnis hinzugefügt wird. Die erwarteten Dimensionen des BiasTensor gelten { 1, OutputChannelCount, 1, 1 } für 4D.

OutputScaleTensor

Typ: const DML_TENSOR_DESC*

Ein Tensor, der die Ausgabeskalierungsdaten enthält. Die erwarteten Dimensionen des OutputScaleTensor sind { 1, 1, 1, 1 }. Dieser Eingabeskalierungswert wird zum Quantisieren der Convolution-Ausgabewerte verwendet.

OutputZeroPointTensor

Typ: _Maybenull_ const DML_TENSOR_DESC*

Ein optionaler Tensor, der die Filter-Nullpunktdaten enthält. Die erwarteten Dimensionen des OutputZeroPointTensor sind { 1, 1, 1, 1 }. Dieser Nullpunktwert der Eingabe wird verwendet, um die Konvolution der Ausgabewerte zu quantisieren.

OutputTensor

Typ: const DML_TENSOR_DESC*

Ein Tensor, in den die Ergebnisse geschrieben werden sollen. Die erwarteten Dimensionen des OutputTensor sind { OutputBatchCount, OutputChannelCount, OutputHeight, OutputWidth }.

DimensionCount

Typ: UINT

Die Anzahl der räumlichen Dimensionen für den Konvolutionsvorgang. Räumliche Dimensionen sind die niedrigeren Dimensionen des Faltungsfilter-Tensors FilterTensor. Dieser Wert bestimmt auch die Größe der Arrays Strides, Dilations, StartPadding und EndPadding . Nur der Wert 2 wird unterstützt.

Strides

Typ: _Field_size_(DimensionCount) const UINT*

Die Schritte der Faltungsoperation. Diese Schritte werden auf den Faltungsfilter angewendet. Sie sind getrennt von den Tensorschritten, die in DML_TENSOR_DESC enthalten sind.

Dilations

Typ: _Field_size_(DimensionCount) const UINT*

Die Dilaten der Konvolutionsoperation. Dilatierungen sind Schritte, die auf die Elemente des Filterkernels angewendet werden. Dies hat den Effekt, dass ein größerer Filterkernel simuliert wird, indem die internen Filterkernelelemente mit Nullen aufgefüllt werden.

StartPadding

Typ: _Field_size_(DimensionCount) const UINT*

Die Abstandswerte, die am Anfang jeder räumlichen Dimension des Filters und des Eingabe tensors des Konvolutionsvorgangs angewendet werden sollen.

EndPadding

Typ: _Field_size_(DimensionCount) const UINT*

Die Abstandswerte, die am Ende jeder räumlichen Dimension des Filters und des Eingabe tensors des Konvolutionsvorgangs angewendet werden sollen.

GroupCount

Typ: UINT

Die Anzahl der Gruppen, in die der Faltungsvorgang unterteilt werden soll. GroupCount kann verwendet werden, um tiefenweise Konvolution zu erreichen, indem GroupCount auf die Anzahl der Eingabekanäle festgelegt wird. Dadurch wird die Konvolution in eine separate Konvolution pro Eingabekanal aufgeteilt.

Verfügbarkeit

Dieser Operator wurde in DML_FEATURE_LEVEL_2_1eingeführt.

Tensoreinschränkungen

  • BiasTensor, FilterTensor, InputTensor und OutputTensor müssen über dieselbe DimensionCount verfügen.
  • OutputTensor und OutputZeroPointTensor müssen denselben Datentyp aufweisen.
  • InputTensor und InputZeroPointTensor müssen denselben Datentyp aufweisen.
  • FilterTensor und FilterZeroPointTensor müssen denselben Datentyp aufweisen.

Tensorunterstützung

DML_FEATURE_LEVEL_5_2 und höher

Tensor Variante Unterstützte Dimensionsanzahl Unterstützte Datentypen
InputTensor Eingabe 3 bis 4 INT8, UINT8
InputScaleTensor Eingabe 1 bis 4 FLOAT32
InputZeroPointTensor Optionale Eingabe 1 bis 4 INT8, UINT8
FilterTensor Eingabe 3 bis 4 INT8, UINT8
FilterScaleTensor Eingabe 1 bis 4 FLOAT32
FilterZeroPointTensor Optionale Eingabe 1 bis 4 INT8, UINT8
BiasTensor Optionale Eingabe 3 bis 4 INT32
OutputScaleTensor Eingabe 1 bis 4 FLOAT32
OutputZeroPointTensor Optionale Eingabe 1 bis 4 INT8, UINT8
OutputTensor Ausgabe 3 bis 4 INT8, UINT8

DML_FEATURE_LEVEL_4_0 und höher

Tensor Variante Unterstützte Dimensionsanzahl Unterstützte Datentypen
InputTensor Eingabe 3 bis 4 INT8, UINT8
InputScaleTensor Eingabe 1 bis 4 FLOAT32
InputZeroPointTensor Optionale Eingabe 1 bis 4 INT8, UINT8
FilterTensor Eingabe 3 bis 4 INT8, UINT8
FilterScaleTensor Eingabe 3 bis 4 FLOAT32
FilterZeroPointTensor Optionale Eingabe 1 bis 4 INT8, UINT8
BiasTensor Optionale Eingabe 3 bis 4 INT32
OutputScaleTensor Eingabe 1 bis 4 FLOAT32
OutputZeroPointTensor Optionale Eingabe 1 bis 4 INT8, UINT8
OutputTensor Ausgabe 3 bis 4 INT8, UINT8

DML_FEATURE_LEVEL_2_1 und höher

Tensor Variante Unterstützte Dimensionsanzahl Unterstützte Datentypen
InputTensor Eingabe 4 INT8, UINT8
InputScaleTensor Eingabe 4 FLOAT32
InputZeroPointTensor Optionale Eingabe 4 INT8, UINT8
FilterTensor Eingabe 4 INT8, UINT8
FilterScaleTensor Eingabe 4 FLOAT32
FilterZeroPointTensor Optionale Eingabe 4 INT8, UINT8
BiasTensor Optionale Eingabe 4 INT32
OutputScaleTensor Eingabe 4 FLOAT32
OutputZeroPointTensor Optionale Eingabe 4 INT8, UINT8
OutputTensor Ausgabe 4 INT8, UINT8

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 10 Build 20348
Unterstützte Mindestversion (Server) Windows 10 Build 20348
Kopfzeile directml.h