DML_PADDING_OPERATOR_DESC-Struktur (directml.h)
Überhöht den Eingabe tensor mit konstanten oder gespiegelten Werten an den Kanten und schreibt das Ergebnis in die Ausgabe.
Syntax
struct DML_PADDING_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
const DML_TENSOR_DESC *OutputTensor;
DML_PADDING_MODE PaddingMode;
FLOAT 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
ist . OutputTensor.Sizes[i] = InputTensor.Sizes[i] + StartPadding[i] + EndPadding[i]
PaddingMode
Typ: DML_PADDING_MODE
Der Auffüllungsmodus, der beim Füllen der Auffüllbereiche verwendet werden soll.
- DML_PADDING_MODE_CONSTANT. Verwendet einen einzelnen konstanten Wert, der von PaddingValue für alle Auffüllungswerte definiert wird (siehe Beispiel 1).
- DML_PADDING_MODE_EDGE. Verwenden Sie für jede Dimension die Edgewerte dieser Dimension für alle Auffüllungswerte (siehe Beispiel 2).
- DML_PADDING_MODE_REFLECTION. Spiegeln Sie die Werte des Tensors so, als ob wir ihn direkt an den Kanten gefaltet haben, was bedeutet, dass Kanten nicht gespiegelt werden. Beachten Sie, dass
StartPadding[i] >= InputTensor.Sizes[i]
, undEndPadding[i] >= InputTensor.Sizes[i]
gültig ist, was bedeutet, dass wir neue Auffüllbereiche regelmäßig Spiegel können, indem sie über vorherige Auffüllungsregionen 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]
, undEndPadding[i] > InputTensor.Sizes[i]
gültig ist, was bedeutet, dass wir neue Auffüllungsregionen regelmäßig Spiegel können, indem sie über vorherige Auffüllungsregionen gefaltet werden (siehe Beispiel 4). Dieser Modus wurde in FeatureebeneDML_FEATURE_LEVEL_3_0
eingeführt.
PaddingValue
Typ: FLOAT
Der bei zu verwendende PaddingMode == DML_PADDING_MODE_CONSTANT
Auffüllwert. Dieser Wert wird für andere Auffüllungsmodi ignoriert. Beachten Sie, dass, wenn der Datentyp der Tensoren nicht DML_TENSOR_DATA_TYPE_FLOAT16 oder DML_TENSOR_DATA_TYPE_FLOAT32 ist, der Wert möglicherweise abgeschnitten wird (z. B. wird 10.6 zu 10).
DimensionCount
Typ: UINT
Die Größe der Arrays, auf die von StartPadding und EndPadding verwiesen wird. Dieser Wert muss der gleiche Wert wie die Dimensionsanzahl von InputTensor und OutputTensor sein.
StartPadding
Typ: _Field_size_(DimensionCount) const UINT*
Die Größen der Auffüllbereiche, die am Anfang jeder Dimension hinzugefügt werden sollen. Für jede Dimension i
ist . StartPadding[i] = OutputTensor.Sizes[i] - InputTensor.Sizes[i] - EndPadding[i]
EndPadding
Typ: _Field_size_(DimensionCount) const UINT*
Die Größen der Auffüllbereiche, die am Ende jeder Dimension hinzugefügt werden sollen. Für jede Dimension i
ist . EndPadding[i] = OutputTensor.Sizes[i] - InputTensor.Sizes[i] - StartPadding[i]
Beispiele
Beispiel 1
PaddingMode: DML_PADDING_MODE_CONSTANT
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
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
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
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_1_0
eingeführt.
Tensoreinschränkungen
InputTensor und OutputTensor müssen denselben DataType und DimensionCount aufweisen.
Tensorunterstützung
DML_FEATURE_LEVEL_5_0 und höher
Tensor | Typ | 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 |
DML_FEATURE_LEVEL_3_1 und höher
Tensor | Typ | Unterstützte Dimensionsanzahl | Unterstützte Datentypen |
---|---|---|---|
InputTensor | Eingabe | 1 bis 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputTensor | Ausgabe | 1 bis 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_2_1 und höher
Tensor | Typ | Unterstützte Dimensionsanzahl | Unterstützte Datentypen |
---|---|---|---|
InputTensor | Eingabe | 4 bis 5 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputTensor | Ausgabe | 4 bis 5 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_1_0 und höher
Tensor | Typ | Unterstützte Dimensionsanzahl | Unterstützte Datentypen |
---|---|---|---|
InputTensor | Eingabe | 4 bis 5 | FLOAT32, FLOAT16 |
OutputTensor | Ausgabe | 4 bis 5 | FLOAT32, FLOAT16 |
Anforderungen
Kopfzeile | directml.h |