Partager via


DML_CONVOLUTION_OPERATOR_DESC structure (directml.h)

Effectue une convolution de FilterTensor avec inputTensor. Cet opérateur prend en charge un certain nombre de configurations de convolution standard. Ces configurations standard incluent la convolution avant et arrière (transposeée) en définissant les champs Direction et Mode , ainsi que la convolution en profondeur en définissant le champ GroupCount .

Résumé des étapes impliquées : effectuer la convolution dans le tenseur de sortie ; remodeler le biais pour qu’il ait les mêmes tailles de dimension que le tenseur de sortie ; ajoutez le tenseur de biais remodelé au tenseur de sortie.

Syntaxe

struct DML_CONVOLUTION_OPERATOR_DESC {
  const DML_TENSOR_DESC     *InputTensor;
  const DML_TENSOR_DESC     *FilterTensor;
  const DML_TENSOR_DESC     *BiasTensor;
  const DML_TENSOR_DESC     *OutputTensor;
  DML_CONVOLUTION_MODE      Mode;
  DML_CONVOLUTION_DIRECTION Direction;
  UINT                      DimensionCount;
  const UINT                *Strides;
  const UINT                *Dilations;
  const UINT                *StartPadding;
  const UINT                *EndPadding;
  const UINT                *OutputPadding;
  UINT                      GroupCount;
  const DML_OPERATOR_DESC   *FusedActivation;
};

Membres

InputTensor

Type : const DML_TENSOR_DESC*

Tenseur contenant les données d’entrée. Les dimensions attendues du inputTensor sont les suivantes :

  • { BatchCount, InputChannelCount, InputWidth } pour la 3D,
  • { BatchCount, InputChannelCount, InputHeight, InputWidth } pour la 4D, et
  • { BatchCount, InputChannelCount, InputDepth, InputHeight, InputWidth } pour 5D.

FilterTensor

Type : const DML_TENSOR_DESC*

Tenseur contenant les données de filtre. Les dimensions attendues du FilterTensor sont les suivantes :

  • { FilterBatchCount, FilterChannelCount, FilterWidth } pour la 3D,
  • { FilterBatchCount, FilterChannelCount, FilterHeight, FilterWidth } pour la 4D, et
  • { FilterBatchCount, FilterChannelCount, FilterDepth, FilterHeight, FilterWidth } pour 5D.

BiasTensor

Type : _Maybenull_ const DML_TENSOR_DESC*

Tenseur facultatif 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 les suivantes :

  • { 1, OutputChannelCount, 1 } pour la 3D,
  • { 1, OutputChannelCount, 1, 1 } pour la 4D, et
  • { 1, OutputChannelCount, 1, 1, 1 } pour 5D.

Pour chaque canal de sortie, la valeur de biais unique de ce canal est ajoutée à chaque élément de ce canal du OutputTensor. Autrement dit, le BiasTensor est diffusé à la taille du OutputTensor, et ce que l’opérateur retourne est la somme de ce BiasTensor diffusé avec le résultat de la convolution.

OutputTensor

Type : const DML_TENSOR_DESC*

Tenseur dans lequel écrire les résultats. Les dimensions attendues du OutputTensor sont les suivantes :

  • { BatchCount, OutputChannelCount, OutputWidth } pour la 3D,
  • { BatchCount, OutputChannelCount, OutputHeight, OutputWidth } pour la 4D, et
  • { BatchCount, OutputChannelCount, OutputDepth, OutputHeight, OutputWidth } pour 5D.

Mode

Type : DML_CONVOLUTION_MODE

Mode à utiliser pour l’opération de convolution. DML_CONVOLUTION_MODE_CROSS_CORRELATION est le comportement requis pour les scénarios d’inférence classiques. En revanche, DML_CONVOLUTION_MODE_CONVOLUTION inverse l’ordre des éléments dans chaque noyau de filtre le long de chaque dimension spatiale.

Direction

Type : DML_CONVOLUTION_DIRECTION

Direction de l’opération de convolution. DML_CONVOLUTION_DIRECTION_FORWARD est la forme principale de convolution utilisée pour l’inférence où une combinaison de DML_CONVOLUTION_DIRECTION_FORWARD et de DML_CONVOLUTION_DIRECTION_BACKWARD est utilisée pendant l’entraînement.

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. Par exemple, la largeur et la hauteur sont des dimensions spatiales d’un tenseur de filtre de convolution 4D. Cette valeur détermine également la taille des tableaux Strides, Dilations, StartPadding, EndPadding et OutputPadding . Elle doit être définie sur 2 lorsque InputTensor.DimensionCount a la valeur 4, et 3 lorsque InputTensor.DimensionCount a la valeur 5.

Strides

Type : _Field_size_(DimensionCount) const UINT*

Tableau contenant 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*

Tableau contenant les dilatations 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*

Tableau contenant les 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. Les valeurs de remplissage de début sont interprétées en fonction du champ Direction .

EndPadding

Type : _Field_size_(DimensionCount) const UINT*

Tableau contenant les valeurs de remplissage à appliquer à la fin de chaque dimension spatiale du filtre et du tenseur d’entrée de l’opération de convolution. Les valeurs de remplissage de fin sont interprétées en fonction du champ Direction .

OutputPadding

Type : _Field_size_(DimensionCount) const UINT*

Tableau contenant le remplissage de sortie de l’opération de convolution. OutputPadding applique un remplissage zéro au résultat de la convolution. Ce remplissage est appliqué à la fin de chaque dimension spatiale du tenseur de sortie.

GroupCount

Type : UINT

Nombre de groupes dans lesquels diviser l’opération de convolution. Cela peut être utilisé pour obtenir une convolution en profondeur en définissant GroupCount égal au nombre de canaux d’entrée et Direction égale à DML_CONVOLUTION_DIRECTION_FORWARD. Cela divise la convolution en une convolution distincte par canal d’entrée.

FusedActivation

Type : _Maybenull_ const DML_OPERATOR_DESC*

Couche d’activation fusionnée facultative à appliquer après la convolution. Pour plus d’informations, consultez Utilisation d’opérateurs fusionnés pour améliorer les performances.

Interactions en mode

Mode de convolution Sens de la convolution Orientation du filtre
DML_CONVOLUTION_MODE_CROSS_CORRELATION DML_CONVOLUTION_DIRECTION_FORWARD le filtre a une orientation d’identité
DML_CONVOLUTION_MODE_CROSS_CORRELATION DML_CONVOLUTION_DIRECTION_BACKWARD le filtre est transpose le long des axes x,y
DML_CONVOLUTION_MODE_CONVOLUTION DML_CONVOLUTION_DIRECTION_FORWARD le filtre est transpose le long des axes x,y
DML_CONVOLUTION_MODE_CONVOLUTION DML_CONVOLUTION_DIRECTION_BACKWARD le filtre a une orientation d’identité

Disponibilité

Cet opérateur a été introduit dans DML_FEATURE_LEVEL_1_0.

Contraintes tensoriels

BiasTensor, FilterTensor, InputTensor et OutputTensor doivent avoir les mêmes DataType et DimensionCount.

Prise en charge des tenseurs

DML_FEATURE_LEVEL_4_0 et versions ultérieures

Tenseur Genre Dimensions Nombre de dimensions pris en charge Types de données pris en charge
InputTensor Entrée { BatchCount, InputChannelCount, [InputDepth], [InputHeight], InputWidth } De 3 à 5 FLOAT32, FLOAT16
FilterTensor Entrée { FilterBatchCount, FilterChannelCount, [FilterDepth], [FilterHeight], FilterWidth } De 3 à 5 FLOAT32, FLOAT16
BiasTensor Entrée facultative { 1, OutputChannelCount, [1], [1], 1 } De 3 à 5 FLOAT32, FLOAT16
OutputTensor Sortie { BatchCount, OutputChannelCount, [OutputDepth], [OutputHeight], OutputWidth } De 3 à 5 FLOAT32, FLOAT16

DML_FEATURE_LEVEL_1_0 et versions ultérieures

Tenseur Genre Dimensions Nombre de dimensions pris en charge Types de données pris en charge
InputTensor Entrée { BatchCount, InputChannelCount, [InputDepth], InputHeight, InputWidth } 4 à 5 FLOAT32, FLOAT16
FilterTensor Entrée { FilterBatchCount, FilterChannelCount, [FilterDepth], FilterHeight, FilterWidth } 4 à 5 FLOAT32, FLOAT16
BiasTensor Entrée facultative { 1, OutputChannelCount, [1], 1, 1 } 4 à 5 FLOAT32, FLOAT16
OutputTensor Sortie { BatchCount, OutputChannelCount, [OutputDepth], OutputHeight, OutputWidth } 4 à 5 FLOAT32, FLOAT16

Configuration requise

Condition requise Valeur
En-tête directml.h

Voir aussi