Freigeben über


DML_UNFOLD_OPERATOR_DESC Struktur (directml.h)

Extrahiert lokale Blöcke aus einem Batcheingabe-Tensor.

Betrachten Sie einen InputTensor mit Shape (N,C,*), wobei * eine beliebige Anzahl räumlicher Dimensionen (<=6) ist. Der Vorgang flacht jeden gleitenden WindowSize'd-Block innerhalb des InputTensor in eine Spalte eines OutputTensor ab. Der OutputTensor ist ein 3D-Tensor, der lokale Blöcke enthält, z. B. Patches von Bildern, von Shape (N,C×∏(WindowSizes),BlockCount), wobei N Batchdimension ist, C×∏(WindowSizes) die Anzahl der Werte in einem Fenster (ein Fenster hat ∏(WindowSizes) räumliche Speicherorte, die jeweils einen C-Kanal-Vektor enthalten), und BlockCount ist die Gesamtanzahl der Blöcke. Die Argumente müssen erfüllen:

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

BlockAnzahl = ∏d BlöckePerDimension[d]

Ort:

  • SpatialSize wird durch die räumlichen Dimensionen der Eingabe (*) gebildet.
  • <0 = d < DimensionAnzahl

Die Indizierungsausgabe an der letzten Dimension (Spaltendimension) gibt alle Werte innerhalb eines bestimmten Blocks an.

Die Argumente StartPadding, EndPadding, Strides und Dilations geben an, wie die Schiebeblöcke abgerufen werden.

Von Bedeutung

Diese API ist als Teil des eigenständigen redistributable-Pakets von DirectML verfügbar (siehe Microsoft.AI.DirectML , Version 1.15.1 und höher). Siehe auch den DirectML-Versionsverlauf.

Syntax

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

Elemente

InputTensor

Typ: const DML_TENSOR_DESC*

Der Eingabe-Tensor, aus dem gelesen werden soll.

OutputTensor

Typ: const DML_TENSOR_DESC*

Der Ausgabe-Tensor, in den die Ergebnisse geschrieben werden sollen.

DimensionCount

Typ: UINT

Die räumlichen Dimensionen von InputTensor. DimensionCount muss sich im Bereich [1, 6]befinden.

WindowSizes

Typ: _Field_size_(DimensionCount) const UINT*

Die Größe des gleitenden Fensters.

Strides

Typ: _Field_size_(DimensionCount) const UINT*

Die Stride des gleitenden Fensters (mit Dimensionen WindowSizes) in den räumlichen Eingabedimensionen. Sie sind von den Tensorschritten getrennt, die in DML_TENSOR_DESC enthalten sind. Schrittgröße der extrahierten Patches.

Dilations

Typ: _Field_size_(DimensionCount) const UINT*

Die Dilationen des Gleitfensters (mit Dimensionen WindowSizes) in den räumlichen Eingabedimensionen, indem der Abstand zwischen den Kernelpunkten skaliert wird. Dilationen des extrahierten Patches.

StartPadding

Typ: _Field_size_(DimensionCount) const UINT*

Ein Array, das die Menge der impliziten Nullabstand enthält, die am Anfang jeder räumlichen Dimension von InputTensor angewendet werden soll. Beginnen Sie den Abstand des Quell-Tensors.

EndPadding

Typ: _Field_size_(DimensionCount) const UINT*

Ein Array, das den impliziten Nullabstand enthält, der am Ende jeder räumlichen Dimension von InputTensor angewendet werden soll. Beenden des Abstands des Quell-Tensors.

Beispiele

Beispiel 1.

1-Kanal entfalten.

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

Beispiel 2.

1 Kanal, gepolstert gefaltet.

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

Verfügbarkeit

Dieser Operator wurde in DML_FEATURE_LEVEL_6_4 eingeführt.

Tensoreinschränkungen

InputTensor und OutputTensor müssen denselben DimensionCount haben.

Tensorunterstützung

Tensor Variante Unterstützte Dimensionsanzahl Unterstützte Datentypen
InputTensor Eingabe 3 bis 8
AusgangTensor Ausgabe 3 bis 8

Anforderungen

   
Kopfball directml.h