Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ü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 iist . 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_0eingeführt.
PaddingValue
Typ: FLOAT
Der bei zu verwendende PaddingMode == DML_PADDING_MODE_CONSTANTAuffü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 iist . 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 iist . 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_0eingefü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 |