Condividi tramite


struttura DML_FOLD_OPERATOR_DESC (directml.h)

Combina una matrice di patch formate da una finestra scorrevole in un tensore contenitore di grandi dimensioni.

Si consideri un tensore di input in batch contenente blocchi locali scorrevoli, ad esempio patch di immagini, forma (N,C×∏(WindowSizes),BlockCount), dove N è dimensione batch, C×∏(WindowSizes) è il numero totale di blocchi all'interno di una finestra (una finestra ha posizioni spaziali ∏(WindowSizes) ognuna contenente un vettore con canale C) e BlockCount è il numero totale di blocchi. Questa operazione combina questi blocchi locali nel tensore di output di grandi dimensioni della forma (N,C,OutputSize[0],OutputSize[1],...) sommando i valori sovrapposti. Gli argomenti devono soddisfare:

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

BlockCount = ∏d BlocksPerDimension[d]

Dove:

  • <0 = d < Conteggio Dimensione

OutputSize (dimensioni di OutputTensor) descrive la forma spaziale del tensore di grandi dimensioni dei blocchi locali scorrevoli.

Gli argomenti StartPadding, EndPadding, Strides e Dilations specificano come vengono recuperati i blocchi scorrevoli.

Importante

Questa API è disponibile come parte del pacchetto ridistribuibile autonomo DirectML (vedere Microsoft.AI.DirectML versione 1.15.1 e successive. Vedere anche cronologia delle versioni di DirectML.

Sintassi

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;
};

Membri

InputTensor

Tipo: const DML_TENSOR_DESC*

Tensore di input da cui leggere.

OutputTensor

Tipo: const DML_TENSOR_DESC*

Tensore di output in cui scrivere i risultati.

DimensionCount

Tipo: UINT

Dimensioni spaziali di InputTensor. DimensionCount deve essere <= 6.

WindowSizes

Tipo: _Field_size_(DimensionCount) const UINT*

Dimensione della finestra scorrevole. Dimensioni della patch estratta.

Strides

Tipo: _Field_size_(DimensionCount) const UINT*

Stride della finestra scorrevole (con dimensioni WindowSizes) nelle dimensioni spaziali di input. Sono separati dai progressi del tensore inclusi in DML_TENSOR_DESC. Dimensioni delle patch estratte.

Dilations

Tipo: _Field_size_(DimensionCount) const UINT*

Le dilation della finestra scorrevole (con dimensioni WindowSizes) nelle dimensioni spaziali di input, ridimensionando lo spazio tra i punti del kernel. Dilation della patch estratta.

StartPadding

Tipo: _Field_size_(DimensionCount) const UINT*

Matrice contenente la quantità di spaziatura interna implicita da applicare all'inizio di ogni dimensione spaziale di InputTensor. Iniziare la spaziatura interna del tensore di origine.

EndPadding

Tipo: _Field_size_(DimensionCount) const UINT*

Matrice contenente la quantità di spaziatura interna implicita zero da applicare alla fine di ogni dimensione spaziale di InputTensor. Riempimento finale del tensore di origine.

Esempi

Esempio 1

Una piega a 1 canale.

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.]]]]

Esempio 2

Una piega interna a 1 canale.

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.]]]]

Esempio 3

Una piega interna a 2 canali.

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à

Questo operatore è stato introdotto in DML_FEATURE_LEVEL_6_4.

Vincoli tensor

InputTensor e OutputTensor devono avere lo stesso DimensionCount.

Supporto tensor

Tensore Tipo Conteggi delle dimensioni supportati Tipi di dati supportati
InputTensor Inserimento da 3 a 8
OutputTensor Risultato da 3 a 8

Requisiti

   
Intestazione directml.h