Partager via


structure DML_FOLD_OPERATOR_DESC (directml.h)

Combine un tableau de correctifs formés à partir d’une fenêtre glissante dans un grand capteur contenant.

Considérez un tensor d’entrée par lot contenant des blocs locaux glissants, par exemple, des correctifs d’images, des formes (N,C×∏(WindowSizes),BlockCount), où N est une dimension de lot, C×∏(WindowSizes) est le nombre de valeurs dans une fenêtre (une fenêtre a ∏(WindowSizes) emplacements spatiaux chacun contenant un vecteur canalisé C), et BlockCount est le nombre total de blocs. Cette opération combine ces blocs locaux dans le grand capteur de sortie de forme (N,C,OutputSize[0],OutputSize[1],...) en additionnant les valeurs qui se chevauchent. 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ù :

  • <0 = d < DimensionCount

La taille de OutputSize (la taille de OutputTensor) décrit la forme spatiale du grand capteur contenant les blocs locaux glissants.

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_FOLD_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 être <= 6.

WindowSizes

Type : _Field_size_(DimensionCount) const UINT*

Taille de la fenêtre glissante. Taille du correctif extrait.

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

Pliage à 1 canal.

InputTensor: (Sizes:{1, 9, 4}, 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., 25., 26., 27.],
  [28., 29., 30., 31.],
  [32., 33., 34., 35.]]]
DimensionCount: 2
WindowSizes: {3, 3}
Strides: {1, 1}
Dilations: {1, 1}
StartPadding: {0, 0}
EndPadding: {0, 0}
OutputTensor: (Sizes:{1, 1, 4, 4}, DataType:FLOAT32)
[[[[  0.,   5.,  13.,   9.],
   [ 14.,  38.,  54.,  32.],
   [ 38.,  86., 102.,  56.],
   [ 26.,  57.,  65.,  35.]]]]

Exemple 2

Un pliage à 1 canal, rembourré.

InputTensor: (Sizes:{1, 9, 8}, 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., 25., 26., 27., 28., 29., 30., 31.],
  [32., 33., 34., 35., 36., 37., 38., 39.],
  [40., 41., 42., 43., 44., 45., 46., 47.],
  [48., 49., 50., 51., 52., 53., 54., 55.],
  [56., 57., 58., 59., 60., 61., 62., 63.],
  [64., 65., 66., 67., 68., 69., 70., 71.]]]
DimensionCount: 2
WindowSizes: {3, 3}
Strides: {1, 1}
Dilations: {1, 1}
StartPadding: {1, 0}
EndPadding: {1, 0}
OutputTensor: (Sizes:{1, 1, 4, 4}, DataType:FLOAT32)
[[[[ 26.,  70., 102.,  60.],
   [ 78., 183., 231., 129.],
   [ 84., 195., 243., 135.],
   [ 82., 182., 214., 116.]]]]

Exemple 3

Un pliage à 2 canaux, rembourré.

InputTensor: (Sizes:{1, 18, 8}, 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.,  25.,  26.,  27.,  28.,  29.,  30.,  31.],
  [ 32.,  33.,  34.,  35.,  36.,  37.,  38.,  39.],
  [ 40.,  41.,  42.,  43.,  44.,  45.,  46.,  47.],
  [ 48.,  49.,  50.,  51.,  52.,  53.,  54.,  55.],
  [ 56.,  57.,  58.,  59.,  60.,  61.,  62.,  63.],
  [ 64.,  65.,  66.,  67.,  68.,  69.,  70.,  71.],
  [ 72.,  73.,  74.,  75.,  76.,  77.,  78.,  79.],
  [ 80.,  81.,  82.,  83.,  84.,  85.,  86.,  87.],
  [ 88.,  89.,  90.,  91.,  92.,  93.,  94.,  95.],
  [ 96.,  97.,  98.,  99., 100., 101., 102., 103.],
  [104., 105., 106., 107., 108., 109., 110., 111.],
  [112., 113., 114., 115., 116., 117., 118., 119.],
  [120., 121., 122., 123., 124., 125., 126., 127.],
  [128., 129., 130., 131., 132., 133., 134., 135.],
  [136., 137., 138., 139., 140., 141., 142., 143.]]]
DimensionCount: 2
WindowSizes: {3, 3}
Strides: {1, 1}
Dilations: {1, 1}
StartPadding: {1, 0}
EndPadding: {1, 0}
OutputTensor: (Sizes:{1, 2, 4, 4}, DataType:FLOAT32)
[[[[ 26.,  70., 102.,  60.],
   [ 78., 183., 231., 129.],
   [ 84., 195., 243., 135.],
   [ 82., 182., 214., 116.]],

  [[170., 358., 390., 204.],
   [294., 615., 663., 345.],
   [300., 627., 675., 351.],
   [226., 470., 502., 260.]]]]

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