estrutura DML_PADDING_OPERATOR_DESC (directml.h)
Infla o tensor de entrada com valores constantes ou espelhados nas bordas e grava o resultado na saída.
Sintaxe
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;
};
Membros
InputTensor
Tipo: const DML_TENSOR_DESC*
Um tensor que contém os dados de entrada.
OutputTensor
Tipo: const DML_TENSOR_DESC*
Um tensor que contém os dados de saída. Para cada dimensão i
, OutputTensor.Sizes[i] = InputTensor.Sizes[i] + StartPadding[i] + EndPadding[i]
.
PaddingMode
Tipo: DML_PADDING_MODE
O modo de preenchimento a ser usado ao preencher as regiões de preenchimento.
- DML_PADDING_MODE_CONSTANT. Usa um único valor constante definido por PaddingValue para todos os valores de preenchimento (consulte o Exemplo 1).
- DML_PADDING_MODE_EDGE. Para cada dimensão, use os valores de borda dessa dimensão para todos os valores de preenchimento (consulte o Exemplo 2).
- DML_PADDING_MODE_REFLECTION. Espelhar os valores do tensor como se o dobramos diretamente nas bordas, o que significa que as bordas não são espelhadas. Observe que
StartPadding[i] >= InputTensor.Sizes[i]
, eEndPadding[i] >= InputTensor.Sizes[i]
é válido, o que significa que podemos espelho novas regiões de preenchimento periodicamente dobrando-as em regiões de preenchimento anteriores (consulte o Exemplo 3). - DML_PADDING_MODE_SYMMETRIC. Semelhante a DML_PADDING_MODE_REFLECTION, mas as bordas também são espelhadas. Observe que
StartPadding[i] > InputTensor.Sizes[i]
, eEndPadding[i] > InputTensor.Sizes[i]
é válido, o que significa que podemos espelho novas regiões de preenchimento periodicamente dobrando-as em regiões de preenchimento anteriores (consulte o Exemplo 4). Esse modo foi introduzido no nívelDML_FEATURE_LEVEL_3_0
do recurso .
PaddingValue
Tipo: FLOAT
O valor de preenchimento a ser usado quando PaddingMode == DML_PADDING_MODE_CONSTANT
. Esse valor é ignorado para outros modos de preenchimento. Observe que, se o DataType dos tensores não for DML_TENSOR_DATA_TYPE_FLOAT16 ou DML_TENSOR_DATA_TYPE_FLOAT32, o valor poderá ser truncado (por exemplo, 10,6 se tornará 10).
DimensionCount
Tipo: UINT
O tamanho das matrizes apontadas por StartPadding e EndPadding. Esse valor deve ser o mesmo valor que a contagem de dimensões de InputTensor e OutputTensor.
StartPadding
Tipo: _Field_size_(DimensionCount) const UINT*
Os tamanhos das regiões de preenchimento a serem adicionadas no início de cada dimensão. Para cada dimensão i
, StartPadding[i] = OutputTensor.Sizes[i] - InputTensor.Sizes[i] - EndPadding[i]
.
EndPadding
Tipo: _Field_size_(DimensionCount) const UINT*
Os tamanhos das regiões de preenchimento a serem adicionadas no final de cada dimensão. Para cada dimensão i
, EndPadding[i] = OutputTensor.Sizes[i] - InputTensor.Sizes[i] - StartPadding[i]
.
Exemplos
Exemplo 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]]]]
Exemplo 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]]]]
Exemplo 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]]]]
Exemplo 4 (a partir de 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]]]]
Disponibilidade
Esse operador foi introduzido no DML_FEATURE_LEVEL_1_0
.
Restrições do Tensor
InputTensor e OutputTensor devem ter os mesmos DataType e DimensionCount.
Suporte ao Tensor
DML_FEATURE_LEVEL_5_0 e superior
Tensor | Tipo | Contagens de dimensões com suporte | Tipos de dados com suporte |
---|---|---|---|
InputTensor | Entrada | 1 a 8 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
OutputTensor | Saída | 1 a 8 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_3_1 e superior
Tensor | Tipo | Contagens de dimensões com suporte | Tipos de dados com suporte |
---|---|---|---|
InputTensor | Entrada | 1 a 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputTensor | Saída | 1 a 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_2_1 e superior
Tensor | Tipo | Contagens de dimensões com suporte | Tipos de dados com suporte |
---|---|---|---|
InputTensor | Entrada | 4 a 5 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputTensor | Saída | 4 a 5 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_1_0 e superior
Tensor | Tipo | Contagens de dimensões com suporte | Tipos de dados com suporte |
---|---|---|---|
InputTensor | Entrada | 4 a 5 | FLOAT32, FLOAT16 |
OutputTensor | Saída | 4 a 5 | FLOAT32, FLOAT16 |
Requisitos
Cabeçalho | directml.h |