estructura DML_PADDING1_OPERATOR_DESC (directml.h)
Infla el tensor de entrada con valores constantes o reflejados en los bordes y escribe el resultado en la salida.
Sintaxis
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;
};
Miembros
InputTensor
Tipo: const DML_TENSOR_DESC*
Tensor que contiene los datos de entrada.
OutputTensor
Tipo: const DML_TENSOR_DESC*
Tensor que contiene los datos de salida. Para cada dimensión i, OutputTensor.Sizes[i] = InputTensor.Sizes[i] + StartPadding[i] + EndPadding[i]
.
PaddingMode
Tipo: DML_PADDING_MODE*
Modo de relleno que se va a usar al rellenar las regiones de relleno.
- DML_PADDING_MODE_CONSTANT. Usa un único valor constante definido por PaddingValue para todos los valores de relleno (vea el ejemplo 1).
- DML_PADDING_MODE_EDGE. Para cada dimensión, use los valores perimetrales de esa dimensión para todos los valores de relleno (vea el ejemplo 2).
- DML_PADDING_MODE_REFLECTION. Refleje los valores del tensor como si lo doblamos a la derecha en los bordes, lo que significa que los bordes no se reflejan. Tenga en cuenta que
StartPadding[i] >= InputTensor.Sizes[i]
, yEndPadding[i] >= InputTensor.Sizes[i]
es válido, lo que significa que podemos reflejar periódicamente nuevas regiones de relleno al plegarlas en regiones de relleno anteriores (consulte el ejemplo 3). - DML_PADDING_MODE_SYMMETRIC. De forma similar a DML_PADDING_MODE_REFLECTION, pero también se reflejan los bordes. Tenga en cuenta que
StartPadding[i] > InputTensor.Sizes[i]
, yEndPadding[i] > InputTensor.Sizes[i]
es válido, lo que significa que podemos reflejar periódicamente nuevas regiones de relleno al plegarlas en las regiones de relleno anteriores (consulte el ejemplo 4). Este modo se introdujo en el nivelDML_FEATURE_LEVEL_3_0
de característica .
PaddingValueDataType
Tipo: DML_TENSOR_DATA_TYPE
Tipo de datos del miembro PaddingValue , que debe coincidir con OutputTensor.DataType.
PaddingValue
Tipo: DML_SCALAR_UNION
Valor de relleno que se va a usar cuando PaddingMode == DML_PADDING_MODE_CONSTANT
, con PaddingValueDataType que determina cómo interpretar el campo. Este valor se omite para otros modos de relleno.
DimensionCount
Tipo: UINT
Tamaño de las matrices a las que apunta StartPadding y EndPadding. Este valor debe ser el mismo valor que el recuento de dimensiones de InputTensor y OutputTensor.
StartPadding
Tipo: _Field_size_(DimensionCount) const UINT*
Tamaños de las regiones de relleno que se van a agregar al principio de cada dimensión. Para cada dimensión i, StartPadding[i] = OutputTensor.Sizes[i] - InputTensor.Sizes[i] - EndPadding[i]
.
EndPadding
Tipo: _Field_size_(DimensionCount) const UINT*
Tamaños de las regiones de relleno que se van a agregar al final de cada dimensión. Para cada dimensión i, EndPadding[i] = OutputTensor.Sizes[i] - InputTensor.Sizes[i] - StartPadding[i]
.
Observaciones
Ejemplos
Ejemplo 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]]]]
Ejemplo 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]]]]
Ejemplo 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]]]]
Ejemplo 4 (a partir de 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]]]]
Disponibilidad
Este operador se introdujo en DML_FEATURE_LEVEL_5_0.
Restricciones tensor
InputTensor y OutputTensor deben tener el mismo DataType y DimensionCount.
Compatibilidad con Tensor
Tensor | Clase | Recuentos de dimensiones admitidos | Tipos de datos admitidos |
---|---|---|---|
InputTensor | Entrada | De 1 a 8 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
OutputTensor | Resultados | De 1 a 8 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
Requisitos
Requisito | Valor |
---|---|
Header | directml.h |