DML_QUANTIZED_LINEAR_CONVOLUTION_OPERATOR_DESC structure (directml.h)
Effectue une convolution de FilterTensor avec inputTensor. Cet opérateur effectue une convolution avant sur des données quantifiées. Cet opérateur est mathématiquement équivalent à la déquantisation des entrées, à la convole, puis à la quantification de la sortie.
Les fonctions linéaires quantize utilisées par cet opérateur sont les fonctions de quantisation linéaire
Dequantize, fonction
f(Input, Scale, ZeroPoint) = (Input - ZeroPoint) * Scale
Quantize, fonction
f(Input, Scale, ZeroPoint) = clamp(round(Input / Scale) + ZeroPoint, Min, Max)
Syntaxe
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;
};
Membres
InputTensor
Type : const DML_TENSOR_DESC*
Tenseur contenant les données d’entrée. Les dimensions attendues du InputTensor sont { InputBatchCount, InputChannelCount, InputHeight, InputWidth }
.
InputScaleTensor
Type : const DML_TENSOR_DESC*
Tenseur contenant les données d’échelle d’entrée. Les dimensions attendues de sont InputScaleTensor
{ 1, 1, 1, 1 }
. Cette valeur d’échelle est utilisée pour la dequantisation des valeurs d’entrée.
InputZeroPointTensor
Type : _Maybenull_ const DML_TENSOR_DESC*
Tenseur facultatif contenant les données de zéro point d’entrée. Les dimensions attendues de InputZeroPointTensor sont { 1, 1, 1, 1 }
. Cette valeur de point zéro est utilisée pour la dequantisation des valeurs d’entrée.
FilterTensor
Type : const DML_TENSOR_DESC*
Tenseur contenant les données de filtre. Les dimensions attendues de FilterTensor sont { FilterBatchCount, FilterChannelCount, FilterHeight, FilterWidth }
.
FilterScaleTensor
Type : const DML_TENSOR_DESC*
Tenseur contenant les données de mise à l’échelle du filtre. Les dimensions attendues de sont { 1, 1, 1, 1 }
si la FilterScaleTensor
quantisation par tenseur est requise, ou { 1, OutputChannelCount, 1, 1 }
si la quantisation par canal est requise. Cette valeur d’échelle est utilisée pour la dequantisation des valeurs de filtre.
FilterZeroPointTensor
Type : _Maybenull_ const DML_TENSOR_DESC*
Tenseur facultatif contenant les données de zéro point du filtre. Les dimensions attendues de FilterZeroPointTensor sont { 1, 1, 1, 1 }
si la quantisation par tenseur est requise, ou { 1, OutputChannelCount, 1, 1 }
si la quantisation par canal est requise. Cette valeur de point zéro est utilisée pour la dequantisation des valeurs de filtre.
BiasTensor
Type : _Maybenull_ const DML_TENSOR_DESC*
Tenseur contenant les données de biais. Le tenseur de biais est un tenseur contenant des données qui sont diffusées sur le tenseur de sortie à la fin de la convolution qui est ajoutée au résultat. Les dimensions attendues du BiasTensor sont { 1, OutputChannelCount, 1, 1 }
pour la 4D.
OutputScaleTensor
Type : const DML_TENSOR_DESC*
Tenseur contenant les données d’échelle de sortie. Les dimensions attendues du OutputScaleTensor sont { 1, 1, 1, 1 }
. Cette valeur d’échelle d’entrée est utilisée pour quantifier les valeurs de sortie de convolution.
OutputZeroPointTensor
Type : _Maybenull_ const DML_TENSOR_DESC*
Tenseur facultatif contenant les données de zéro point du filtre. Les dimensions attendues de OutputZeroPointTensor sont { 1, 1, 1, 1 }
. Cette valeur de point d’entrée zéro est utilisée pour quantifier la convolution des valeurs de sortie.
OutputTensor
Type : const DML_TENSOR_DESC*
Tenseur dans lequel écrire les résultats. Les dimensions attendues du OutputTensor sont { OutputBatchCount, OutputChannelCount, OutputHeight, OutputWidth }
.
DimensionCount
Type : UINT
Nombre de dimensions spatiales pour l’opération de convolution. Les dimensions spatiales sont les dimensions inférieures du filtre de convolution FilterTensor. Cette valeur détermine également la taille des tableaux Strides, Dilations, StartPadding et EndPadding . Seule la valeur 2 est prise en charge.
Strides
Type : _Field_size_(DimensionCount) const UINT*
Les foulées de l’opération de convolution. Ces foulées sont appliquées au filtre de convolution. Ils sont séparés des foulées tensoriels incluses dans DML_TENSOR_DESC.
Dilations
Type : _Field_size_(DimensionCount) const UINT*
Dilations de l’opération de convolution. Les dilatations sont des foulées appliquées aux éléments du noyau de filtre. Cela a pour effet de simuler un noyau de filtre plus grand en remboursant les éléments de noyau de filtre interne avec des zéros.
StartPadding
Type : _Field_size_(DimensionCount) const UINT*
Valeurs de remplissage à appliquer au début de chaque dimension spatiale du filtre et du tenseur d’entrée de l’opération de convolution.
EndPadding
Type : _Field_size_(DimensionCount) const UINT*
Valeurs de remplissage à appliquer à la fin de chaque dimension spatiale du filtre et du tenseur d’entrée de l’opération de convolution.
GroupCount
Type : UINT
Nombre de groupes dans lesquels diviser l’opération de convolution. GroupCount peut être utilisé pour obtenir une convolution en profondeur en définissant GroupCount comme étant égal au nombre de canaux d’entrée. Cela divise la convolution en une convolution distincte par canal d’entrée.
Disponibilité
Cet opérateur a été introduit dans DML_FEATURE_LEVEL_2_1
.
Contraintes tensoriels
- BiasTensor, FilterTensor, InputTensor et OutputTensor doivent avoir le même DimensionCount.
- OutputTensor et OutputZeroPointTensor doivent avoir le même DataType.
- InputTensor et InputZeroPointTensor doivent avoir le même DataType.
- FilterTensor et FilterZeroPointTensor doivent avoir le même DataType.
Prise en charge des tenseurs
DML_FEATURE_LEVEL_5_2 et versions ultérieures
Tenseur | Genre | Nombre de dimensions pris en charge | Types de données pris en charge |
---|---|---|---|
InputTensor | Entrée | 3 à 4 | INT8, UINT8 |
InputScaleTensor | Entrée | 1 à 4 | FLOAT32 |
InputZeroPointTensor | Entrée facultative | 1 à 4 | INT8, UINT8 |
FilterTensor | Entrée | 3 à 4 | INT8, UINT8 |
FilterScaleTensor | Entrée | 1 à 4 | FLOAT32 |
FilterZeroPointTensor | Entrée facultative | 1 à 4 | INT8, UINT8 |
BiasTensor | Entrée facultative | 3 à 4 | INT32 |
OutputScaleTensor | Entrée | 1 à 4 | FLOAT32 |
OutputZeroPointTensor | Entrée facultative | 1 à 4 | INT8, UINT8 |
OutputTensor | Sortie | 3 à 4 | INT8, UINT8 |
DML_FEATURE_LEVEL_4_0 et versions ultérieures
Tenseur | Genre | Nombre de dimensions pris en charge | Types de données pris en charge |
---|---|---|---|
InputTensor | Entrée | 3 à 4 | INT8, UINT8 |
InputScaleTensor | Entrée | 1 à 4 | FLOAT32 |
InputZeroPointTensor | Entrée facultative | 1 à 4 | INT8, UINT8 |
FilterTensor | Entrée | 3 à 4 | INT8, UINT8 |
FilterScaleTensor | Entrée | 3 à 4 | FLOAT32 |
FilterZeroPointTensor | Entrée facultative | 1 à 4 | INT8, UINT8 |
BiasTensor | Entrée facultative | 3 à 4 | INT32 |
OutputScaleTensor | Entrée | 1 à 4 | FLOAT32 |
OutputZeroPointTensor | Entrée facultative | 1 à 4 | INT8, UINT8 |
OutputTensor | Sortie | 3 à 4 | INT8, UINT8 |
DML_FEATURE_LEVEL_2_1 et versions ultérieures
Tenseur | Genre | Nombre de dimensions pris en charge | Types de données pris en charge |
---|---|---|---|
InputTensor | Entrée | 4 | INT8, UINT8 |
InputScaleTensor | Entrée | 4 | FLOAT32 |
InputZeroPointTensor | Entrée facultative | 4 | INT8, UINT8 |
FilterTensor | Entrée | 4 | INT8, UINT8 |
FilterScaleTensor | Entrée | 4 | FLOAT32 |
FilterZeroPointTensor | Entrée facultative | 4 | INT8, UINT8 |
BiasTensor | Entrée facultative | 4 | INT32 |
OutputScaleTensor | Entrée | 4 | FLOAT32 |
OutputZeroPointTensor | Entrée facultative | 4 | INT8, UINT8 |
OutputTensor | Sortie | 4 | INT8, UINT8 |
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 10 Build 20348 |
Serveur minimal pris en charge | Windows 10 Build 20348 |
En-tête | directml.h |