Share via


DML_PADDING1_OPERATOR_DESC-Struktur (directml.h)

Vergrößert den Eingabe tensor mit konstanten oder gespiegelten Werten an den Kanten und schreibt das Ergebnis in die Ausgabe.

Syntax

struct DML_PADDING1_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *OutputTensor;
  DML_PADDING_MODE      PaddingMode;
  DML_TENSOR_DATA_TYPE  PaddingValueDataType;
  DML_SCALAR_UNION      PaddingValue;
  UINT                  DimensionCount;
  const UINT            *StartPadding;
  const UINT            *EndPadding;
};

Member

InputTensor

Typ: const DML_TENSOR_DESC*

Ein Tensor, der die Eingabedaten enthält.

OutputTensor

Typ: const DML_TENSOR_DESC*

Ein Tensor, der die Ausgabedaten enthält. Für jede Dimension i: OutputTensor.Sizes[i] = InputTensor.Sizes[i] + StartPadding[i] + EndPadding[i].

PaddingMode

Typ: DML_PADDING_MODE*

Der Abstandsmodus, der beim Auffüllen der Abstandsbereiche verwendet werden soll.

  • DML_PADDING_MODE_CONSTANT. Verwendet einen einzelnen konstanten Wert, der von PaddingValue für alle Abstandswerte definiert wird (siehe Beispiel 1).
  • DML_PADDING_MODE_EDGE. Verwenden Sie für jede Dimension die Randwerte dieser Dimension für alle Abstandswerte (siehe Beispiel 2).
  • DML_PADDING_MODE_REFLECTION. Spiegeln Sie die Werte des Tensors so, als ob wir ihn direkt an den Rändern gefaltet haben, was bedeutet, dass die Kanten nicht gespiegelt werden. Beachten Sie, dass StartPadding[i] >= InputTensor.Sizes[i], und EndPadding[i] >= InputTensor.Sizes[i] gültig sind. Dies bedeutet, dass wir neue Auffüllungsbereiche regelmäßig Spiegel können, indem sie über vorherige Auffüllungsbereiche gefaltet werden (siehe Beispiel 3).
  • DML_PADDING_MODE_SYMMETRIC. Ähnlich wie DML_PADDING_MODE_REFLECTION, werden aber auch Kanten gespiegelt. Beachten Sie, dass StartPadding[i] > InputTensor.Sizes[i], und EndPadding[i] > InputTensor.Sizes[i] gültig sind. Dies bedeutet, dass wir neue Auffüllungsbereiche regelmäßig Spiegel können, indem wir sie über vorherige Auffüllungsbereiche falten (siehe Beispiel 4). Dieser Modus wurde in Featureebene DML_FEATURE_LEVEL_3_0eingeführt.

PaddingValueDataType

Typ: DML_TENSOR_DATA_TYPE

Der Datentyp des PaddingValue-Elements , der mit OutputTensor.DataType übereinstimmen muss.

PaddingValue

Typ: DML_SCALAR_UNION

Der Auffüllungswert, der verwendet werden soll, wenn PaddingMode == DML_PADDING_MODE_CONSTANT, wobei PaddingValueDataType bestimmt, wie das Feld interpretiert werden soll. Dieser Wert wird für andere Auffüllungsmodi ignoriert.

DimensionCount

Typ: UINT

Die Größe der Arrays, auf die von StartPadding und EndPadding verwiesen wird. Dieser Wert muss derselbe Wert wie die Dimensionsanzahl von InputTensor und OutputTensor sein.

StartPadding

Typ: _Field_size_(DimensionCount) const UINT*

Die Größen der Abstandsbereiche, die am Anfang jeder Dimension hinzugefügt werden sollen. Für jede Dimension i: StartPadding[i] = OutputTensor.Sizes[i] - InputTensor.Sizes[i] - EndPadding[i].

EndPadding

Typ: _Field_size_(DimensionCount) const UINT*

Die Größen der Abstandsbereiche, die am Ende jeder Dimension hinzugefügt werden sollen. Für jede Dimension i: EndPadding[i] = OutputTensor.Sizes[i] - InputTensor.Sizes[i] - StartPadding[i].

Bemerkungen

Beispiele

Beispiel 1

PaddingMode: DML_PADDING_MODE_CONSTANT
PaddingValueDataType: FLOAT32
PaddingValue: 9
StartPadding: {0, 0, 1, 2}
EndPadding: {0, 0, 3, 4}

InputTensor: (Sizes:{1, 1, 4, 4}, DataType:FLOAT32)
[[[[1, 2, 3, 4],
   [5, 6, 7, 8],
   [1, 2, 3, 4],
   [5, 6, 7, 8]]]]

OutputTensor: (Sizes:{1, 1, 8, 10}, DataType:FLOAT32)
[[[[9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
   [9, 9, 1, 2, 3, 4, 9, 9, 9, 9],
   [9, 9, 5, 6, 7, 8, 9, 9, 9, 9],
   [9, 9, 1, 2, 3, 4, 9, 9, 9, 9],
   [9, 9, 5, 6, 7, 8, 9, 9, 9, 9],
   [9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
   [9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
   [9, 9, 9, 9, 9, 9, 9, 9, 9, 9]]]]

Beispiel 2

PaddingMode: DML_PADDING_MODE_EDGE
PaddingValueDataType: FLOAT32
StartPadding: {0, 0, 1, 2}
EndPadding: {0, 0, 3, 4}

InputTensor: (Sizes:{1, 1, 4, 4}, DataType:FLOAT32)
[[[[1, 2, 3, 4],
   [5, 6, 7, 8],
   [1, 2, 3, 4],
   [5, 6, 7, 8]]]]

OutputTensor: (Sizes:{1, 1, 8, 10}, DataType:FLOAT32)
[[[[1, 1, 1, 2, 3, 4, 4, 4, 4, 4]
   [1, 1, 1, 2, 3, 4, 4, 4, 4, 4],
   [5, 5, 5, 6, 7, 8, 8, 8, 8, 8],
   [1, 1, 1, 2, 3, 4, 4, 4, 4, 4],
   [5, 5, 5, 6, 7, 8, 8, 8, 8, 8],
   [5, 5, 5, 6, 7, 8, 8, 8, 8, 8],
   [5, 5, 5, 6, 7, 8, 8, 8, 8, 8],
   [5, 5, 5, 6, 7, 8, 8, 8, 8, 8]]]]

Beispiel 3

PaddingMode: DML_PADDING_MODE_REFLECTION
PaddingValueDataType: FLOAT32
StartPadding: {0, 0, 1, 2}
EndPadding: {0, 0, 3, 4}

InputTensor: (Sizes:{1, 1, 4, 4}, DataType:FLOAT32)
[[[[1, 2, 3, 4],
   [5, 6, 7, 8],
   [1, 2, 3, 4],
   [5, 6, 7, 8]]]]

OutputTensor: (Sizes:{1, 1, 8, 10}, DataType:FLOAT32)
[[[[7, 6, 5, 6, 7, 8, 7, 6, 5, 6]
   [3, 2, 1, 2, 3, 4, 3, 2, 1, 2],
   [7, 6, 5, 6, 7, 8, 7, 6, 5, 6],
   [3, 2, 1, 2, 3, 4, 3, 2, 1, 2],
   [7, 6, 5, 6, 7, 8, 7, 6, 5, 6],
   [3, 2, 1, 2, 3, 4, 3, 2, 1, 2],
   [7, 6, 5, 6, 7, 8, 7, 6, 5, 6],
   [3, 2, 1, 2, 3, 4, 3, 2, 1, 2]]]]

Beispiel 4 (ab DML_FEATURE_LEVEL_3_0)

PaddingMode: DML_PADDING_MODE_SYMMETRIC
PaddingValueDataType: FLOAT32
StartPadding: {0, 0, 1, 2}
EndPadding: {0, 0, 3, 4}

InputTensor: (Sizes:{1, 1, 4, 4}, DataType:FLOAT32)
[[[[1, 2, 3, 4],
   [5, 6, 7, 8],
   [1, 2, 3, 4],
   [5, 6, 7, 8]]]]

OutputTensor: (Sizes:{1, 1, 8, 10}, DataType:FLOAT32)
[[[[2, 1, 1, 2, 3, 4, 4, 3, 2, 1]
   [2, 1, 1, 2, 3, 4, 4, 3, 2, 1],
   [6, 5, 5, 6, 7, 8, 8, 7, 6, 5],
   [2, 1, 1, 2, 3, 4, 4, 3, 2, 1],
   [6, 5, 5, 6, 7, 8, 8, 7, 6, 5],
   [6, 5, 5, 6, 7, 8, 8, 7, 6, 5],
   [2, 1, 1, 2, 3, 4, 4, 3, 2, 1],
   [6, 5, 5, 6, 7, 8, 8, 7, 6, 5]]]]

Verfügbarkeit

Dieser Operator wurde in DML_FEATURE_LEVEL_5_0 eingeführt.

Tensoreinschränkungen

InputTensor und OutputTensor müssen über denselben DataType und DimensionCount verfügen.

Tensorunterstützung

Tensor Variante Unterstützte Dimensionsanzahl Unterstützte Datentypen
InputTensor Eingabe 1 bis 8 FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8
OutputTensor Ausgabe 1 bis 8 FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8

Anforderungen

Anforderung Wert
Header directml.h