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 |