DML_PADDING_OPERATOR_DESC struttura (directml.h)
Gonfia il tensore di input con valori costanti o con mirroring sui bordi e scrive il risultato nell'output.
Sintassi
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;
};
Members
InputTensor
Tipo: const DML_TENSOR_DESC*
Tensor contenente i dati di input.
OutputTensor
Tipo: const DML_TENSOR_DESC*
Tensor contenente i dati di output. Per ogni dimensione i
, OutputTensor.Sizes[i] = InputTensor.Sizes[i] + StartPadding[i] + EndPadding[i]
.
PaddingMode
Tipo: DML_PADDING_MODE
Modalità di riempimento da usare quando si riempiono le aree di riempimento.
- DML_PADDING_MODE_CONSTANT. Usa un singolo valore costante definito da PaddingValue per tutti i valori di riempimento (vedere Esempio 1).
- DML_PADDING_MODE_EDGE. Per ogni dimensione, usare i valori perimetrali di tale dimensione per tutti i valori di riempimento (vedere Esempio 2).
- DML_PADDING_MODE_REFLECTION. Mirroring dei valori del tensore come se l'abbiamo piegata direttamente sui bordi, il che significa che i bordi non sono mirrorati. Si noti che
StartPadding[i] >= InputTensor.Sizes[i]
, eEndPadding[i] >= InputTensor.Sizes[i]
è valido, che significa che è possibile eseguire il mirroring di nuove aree di riempimento periodicamente riducendole rispetto alle aree di riempimento precedenti (vedere Esempio 3). - DML_PADDING_MODE_SYMMETRIC. Analogamente a DML_PADDING_MODE_REFLECTION, ma anche i bordi sono mirrorati. Si noti che
StartPadding[i] > InputTensor.Sizes[i]
, eEndPadding[i] > InputTensor.Sizes[i]
è valido, che significa che è possibile eseguire il mirroring di nuove aree di riempimento periodicamente piegandoli sulle aree di riempimento precedenti (vedere Esempio 4). Questa modalità è stata introdotta nel livelloDML_FEATURE_LEVEL_3_0
di funzionalità .
PaddingValue
Tipo: FLOAT
Valore di riempimento da usare quando PaddingMode == DML_PADDING_MODE_CONSTANT
. Questo valore viene ignorato per altre modalità di riempimento. Si noti che se il tipo di dati dei tensori non è DML_TENSOR_DATA_TYPE_FLOAT16 o DML_TENSOR_DATA_TYPE_FLOAT32, il valore potrebbe essere troncato (ad esempio, 10,6 diventerà 10).
DimensionCount
Tipo: UINT
Dimensioni delle matrici puntate da StartPadding e EndPadding. Questo valore deve essere lo stesso valore del conteggio delle dimensioni di InputTensor e OutputTensor.
StartPadding
Tipo: _Field_size_(DimensionCount) const UINT*
Dimensioni delle aree di riempimento da aggiungere all'inizio di ogni dimensione. Per ogni dimensione i
, StartPadding[i] = OutputTensor.Sizes[i] - InputTensor.Sizes[i] - EndPadding[i]
.
EndPadding
Tipo: _Field_size_(DimensionCount) const UINT*
Dimensioni delle aree di riempimento da aggiungere alla fine di ogni dimensione. Per ogni dimensione i
, EndPadding[i] = OutputTensor.Sizes[i] - InputTensor.Sizes[i] - StartPadding[i]
.
Esempi
Esempio 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]]]]
Esempio 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]]]]
Esempio 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]]]]
Esempio 4 (a partire da 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]]]]
Disponibilità
Questo operatore è stato introdotto in DML_FEATURE_LEVEL_1_0
.
Vincoli tensor
InputTensor e OutputTensor devono avere lo stesso Oggetto DataType e DimensionCount.
Supporto di Tensor
DML_FEATURE_LEVEL_5_0 e versioni successive
Tensore | Tipo | Conteggi delle dimensioni supportate | Tipi di dati supportati |
---|---|---|---|
InputTensor | Input | da 1 a 8 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
OutputTensor | Output | da 1 a 8 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_3_1 e versioni successive
Tensore | Tipo | Conteggi delle dimensioni supportate | Tipi di dati supportati |
---|---|---|---|
InputTensor | Input | da 1 a 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputTensor | Output | da 1 a 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_2_1 e versioni successive
Tensore | Tipo | Conteggi delle dimensioni supportate | Tipi di dati supportati |
---|---|---|---|
InputTensor | Input | da 4 a 5 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputTensor | Output | da 4 a 5 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_1_0 e versioni successive
Tensore | Tipo | Conteggi delle dimensioni supportate | Tipi di dati supportati |
---|---|---|---|
InputTensor | Input | da 4 a 5 | FLOAT32, FLOAT16 |
OutputTensor | Output | da 4 a 5 | FLOAT32, FLOAT16 |
Requisiti
Intestazione | directml.h |