Partager via


structure DML_UNFOLD_OPERATOR_DESC (directml.h)

Extrait les blocs locaux glissants d’un tensor d’entrée par lot.

Considérez un InputTensor avec une forme (N,C,*), où * est un nombre arbitraire de dimensions spatiales (<=6). L’opération aplatit chaque bloc WindowSize glissant dans le InputTensor dans une colonne d’un OutputTensor. OutputTensor est un tensoriel 3D contenant des blocs locaux glissants, par exemple, des correctifs d’images, de forme (N,C×∏(WindowSizes),BlockCount), où N est une dimension de lot, C×∏(WindowSizes) est le nombre total de valeurs dans une fenêtre (une fenêtre a des emplacements spatiaux ∏(WindowSizes) chacun contenant un vecteur canalisé C), et BlockCount est le nombre total de blocs. Les arguments doivent satisfaire :

BlocksPerDimension[d] = ( ( SpatialSize[d] + StartPadding[d] + EndPadding[d] - Dilatations[d] * (WindowSizes[d] - 1) - 1 ) / stride[d] ) + 1

BlockCount = ∏d BlocksPerDimension[d]

Où :

  • SpatialSize est formé par les dimensions spatiales de l’entrée (*)
  • <0 = d < DimensionCount

La sortie d’indexation à la dernière dimension (dimension de colonne) donne toutes les valeurs d’un certain bloc.

Les arguments StartPadding, EndPadding, Strides et Dilations spécifient la façon dont les blocs glissants sont récupérés.

Important

Cette API est disponible dans le cadre du package redistribuable autonome DirectML (voir Microsoft.AI.DirectML version 1.15.1 et ultérieures. Consultez également l’historique des versions DirectML.

Syntaxe

struct DML_UNFOLD_OPERATOR_DESC
{
    const DML_TENSOR_DESC* InputTensor;
    const DML_TENSOR_DESC* OutputTensor;
    UINT DimensionCount;
    _Field_size_(DimensionCount) const UINT* WindowSizes;
    _Field_size_(DimensionCount) const UINT* Strides;
    _Field_size_(DimensionCount) const UINT* Dilations;
    _Field_size_(DimensionCount) const UINT* StartPadding;
    _Field_size_(DimensionCount) const UINT* EndPadding;
};

Membres

InputTensor

Type : const DML_TENSOR_DESC*

Capteur d’entrée à partir duquel lire.

OutputTensor

Type : const DML_TENSOR_DESC*

Le tensoriel de sortie dans lequel écrire les résultats.

DimensionCount

Type : UINT

Dimensions spatiales d’InputTensor. DimensionCount doit se trouver dans la plage [1, 6].

WindowSizes

Type : _Field_size_(DimensionCount) const UINT*

Taille de la fenêtre glissante.

Strides

Type : _Field_size_(DimensionCount) const UINT*

Le pas de la fenêtre glissante (avec des dimensions WindowSizes) dans les dimensions spatiales d’entrée. Elles sont séparées des pas de capteurs inclus dans DML_TENSOR_DESC. Taille d’étape des correctifs extraits.

Dilations

Type : _Field_size_(DimensionCount) const UINT*

Les dilations de la fenêtre glissante (avec dimensions WindowSizes) dans les dimensions spatiales d’entrée, en mettant à l’échelle l’espace entre les points du noyau. Dilations du correctif extrait.

StartPadding

Type : _Field_size_(DimensionCount) const UINT*

Tableau contenant la quantité de remplissage zéro implicite à appliquer au début de chaque dimension spatiale d’InputTensor. Démarrez le remplissage du capteur source.

EndPadding

Type : _Field_size_(DimensionCount) const UINT*

Tableau contenant la quantité de remplissage implicite zéro à appliquer à la fin de chaque dimension spatiale d’InputTensor. Remplissage final du capteur source.

Exemples

Exemple 1.

1 canal se déroule.

InputTensor: (Sizes:{1, 1, 5, 5}, DataType:FLOAT32)
[[[[ 0.,  1.,  2.,  3.,  4.],
   [ 5.,  6.,  7.,  8.,  9.],
   [10., 11., 12., 13., 14.],
   [15., 16., 17., 18., 19.],
   [20., 21., 22., 23., 24.]]]]
DimensionCount: 2
WindowSizes: {3, 3}
Strides: {1, 1}
Dilations: {1, 1}
StartPadding: {0, 0}
EndPadding: {0, 0}
OutputTensor: (Sizes:{1, 9, 9}, DataType:FLOAT32)
[[[ 0.,  1.,  2.,  5.,  6.,  7., 10., 11., 12.],
  [ 1.,  2.,  3.,  6.,  7.,  8., 11., 12., 13.],
  [ 2.,  3.,  4.,  7.,  8.,  9., 12., 13., 14.],
  [ 5.,  6.,  7., 10., 11., 12., 15., 16., 17.],
  [ 6.,  7.,  8., 11., 12., 13., 16., 17., 18.],
  [ 7.,  8.,  9., 12., 13., 14., 17., 18., 19.],
  [10., 11., 12., 15., 16., 17., 20., 21., 22.],
  [11., 12., 13., 16., 17., 18., 21., 22., 23.],
  [12., 13., 14., 17., 18., 19., 22., 23., 24.]]]

Exemple 2.

Pliage à 1 canal, plié.

InputTensor: (Sizes:{1, 1, 5, 5}, DataType:FLOAT32)
[[[[ 0.,  1.,  2.,  3.,  4.],
   [ 5.,  6.,  7.,  8.,  9.],
   [10., 11., 12., 13., 14.],
   [15., 16., 17., 18., 19.],
   [20., 21., 22., 23., 24.]]]]
DimensionCount: 2
WindowSizes: {3, 3}
Strides: {1, 1}
Dilations: {1, 1}
StartPadding: {1, 0}
EndPadding: {1, 0}
OutputTensor: (Sizes:{1, 9, 15}, DataType:FLOAT32)
[[[ 0.,  0.,  0.,  0.,  1.,  2.,  5.,  6.,  7., 10., 11., 12., 15., 16., 17.],
  [ 0.,  0.,  0.,  1.,  2.,  3.,  6.,  7.,  8., 11., 12., 13., 16., 17., 18.],
  [ 0.,  0.,  0.,  2.,  3.,  4.,  7.,  8.,  9., 12., 13., 14., 17., 18., 19.],
  [ 0.,  1.,  2.,  5.,  6.,  7., 10., 11., 12., 15., 16., 17., 20., 21., 22.],
  [ 1.,  2.,  3.,  6.,  7.,  8., 11., 12., 13., 16., 17., 18., 21., 22., 23.],
  [ 2.,  3.,  4.,  7.,  8.,  9., 12., 13., 14., 17., 18., 19., 22., 23., 24.],
  [ 5.,  6.,  7., 10., 11., 12., 15., 16., 17., 20., 21., 22.,  0.,  0., 0.],
  [ 6.,  7.,  8., 11., 12., 13., 16., 17., 18., 21., 22., 23.,  0.,  0., 0.],
  [ 7.,  8.,  9., 12., 13., 14., 17., 18., 19., 22., 23., 24.,  0.,  0., 0.]]]

Disponibilité

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

Contraintes Tensor

InputTensor et OutputTensor doivent avoir le même DimensionCount.

Prise en charge de Tensor

Tenseur Genre Nombres de dimensions pris en charge Types de données pris en charge
InputTensor Entrée 3 à 8
Tenseur de sortie Sortie 3 à 8

Spécifications

   
En-tête directml.h