Compartir a través de


estructura DML_PADDING_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_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;
};

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], y EndPadding[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], y EndPadding[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 nivel DML_FEATURE_LEVEL_3_0de característica .

PaddingValue

Tipo: FLOAT

Valor de relleno que se va a usar cuando PaddingMode == DML_PADDING_MODE_CONSTANT. Este valor se omite para otros modos de relleno. Tenga en cuenta que si el tipo de datos de los tensores no es DML_TENSOR_DATA_TYPE_FLOAT16 o DML_TENSOR_DATA_TYPE_FLOAT32, el valor podría truncarse (por ejemplo, 10,6 se convertirá en 10).

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].

Ejemplos

Ejemplo 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]]]]

Ejemplo 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]]]]

Ejemplo 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]]]]

Ejemplo 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]]]]

Disponibilidad

Este operador se introdujo en DML_FEATURE_LEVEL_1_0.

Restricciones tensor

InputTensor y OutputTensor deben tener el mismo DataType y DimensionCount.

Compatibilidad con Tensor

DML_FEATURE_LEVEL_5_0 y versiones posteriores

Tensor Kind 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

DML_FEATURE_LEVEL_3_1 y versiones posteriores

Tensor Kind Recuentos de dimensiones admitidos Tipos de datos admitidos
InputTensor Entrada De 1 a 8 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8
OutputTensor Resultados De 1 a 8 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_2_1 y versiones posteriores

Tensor Kind Recuentos de dimensiones admitidos Tipos de datos admitidos
InputTensor Entrada De 4 a 5 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8
OutputTensor Resultados De 4 a 5 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_1_0 y versiones posteriores

Tensor Kind Recuentos de dimensiones admitidos Tipos de datos admitidos
InputTensor Entrada De 4 a 5 FLOAT32, FLOAT16
OutputTensor Resultados De 4 a 5 FLOAT32, FLOAT16

Requisitos

   
Encabezado directml.h