Compartir a través de


estructura DML_UNFOLD_OPERATOR_DESC (directml.h)

Extrae bloques locales deslizantes de un tensor de entrada por lotes.

Considere un InputTensor con forma (N,C,*), donde * es un número arbitrario de dimensiones espaciales (<=6). La operación aplana cada bloque WindowSize'd deslizante dentro de InputTensor en una columna de outputTensor. OutputTensor es un tensor 3D que contiene bloques locales deslizantes, por ejemplo, revisiones de imágenes, de forma (N,C×∏(WindowSizes),BlockCount), donde N es dimensión por lotes, C×∏(WindowSizes) es el número de valores dentro de una ventana (una ventana tiene ∏ (WindowSizes) ubicaciones espaciales cada una que contiene un vector canal C) y BlockCount es el número total de bloques. Los argumentos deben cumplir:

BlocksPerDimension[d] = ( ( SpatialSize[d] + StartPadding[d] + EndPadding[d] - Dilaciones[d] * (WindowSizes[d] - 1) - 1 ) / stride[d] ) + 1

BlockCount = ∏d BlocksPerDimension[d]

Donde:

  • SpatialSize está formado por las dimensiones espaciales de entrada (*)
  • <0 = d < DimensionCount

La salida de indexación en la última dimensión (dimensión de columna) proporciona todos los valores dentro de un bloque determinado.

Los argumentos StartPadding, EndPadding, Strides y Dilations especifican cómo se recuperan los bloques deslizantes.

Importante

Esta API está disponible como parte del paquete redistribuible independiente de DirectML (consulte Microsoft.AI.DirectML versión 1.15.1 y posteriores). Consulte también historial de versiones de DirectML.

Sintaxis

struct DML_UNFOLD_OPERATOR_DESC
{
    const DML_TENSOR_DESC* InputTensor;
    const DML_TENSOR_DESC* OutputTensor;
    UINT DimensionCount;
    _Field_size_(DimensionCount) const UINT* WindowSizes;
    _Field_size_(DimensionCount) const UINT* Strides;
    _Field_size_(DimensionCount) const UINT* Dilations;
    _Field_size_(DimensionCount) const UINT* StartPadding;
    _Field_size_(DimensionCount) const UINT* EndPadding;
};

Miembros

InputTensor

Tipo: const DML_TENSOR_DESC*

Tensor de entrada desde el que se va a leer.

OutputTensor

Tipo: const DML_TENSOR_DESC*

Tensor de salida en el que se van a escribir los resultados.

DimensionCount

Tipo: UINT

Dimensiones espaciales de InputTensor. DimensionCount debe estar en el intervalo [1, 6].

WindowSizes

Tipo: _Field_size_(DimensionCount) const UINT*

Tamaño de la ventana deslizante.

Strides

Tipo: _Field_size_(DimensionCount) const UINT*

El paso de la ventana deslizante (con dimensiones WindowSizes) en las dimensiones espaciales de entrada. Son independientes de los pasos de tensor incluidos en DML_TENSOR_DESC. Tamaño del paso de las revisiones extraídas.

Dilations

Tipo: _Field_size_(DimensionCount) const UINT*

Las dilaciones de la ventana deslizante (con dimensiones WindowSizes) en las dimensiones espaciales de entrada, escalando el espacio entre los puntos del kernel. Dilaciones del parche extraído.

StartPadding

Tipo: _Field_size_(DimensionCount) const UINT*

Matriz que contiene la cantidad de relleno cero implícito que se va a aplicar al principio de cada dimensión espacial de InputTensor. Inicie el relleno del tensor de origen.

EndPadding

Tipo: _Field_size_(DimensionCount) const UINT*

Matriz que contiene la cantidad de relleno implícito de cero que se va a aplicar al final de cada dimensión espacial de InputTensor. Relleno final del tensor de origen.

Ejemplos

Ejemplo 1.

1 canal se desarrolla.

InputTensor: (Sizes:{1, 1, 5, 5}, DataType:FLOAT32)
[[[[ 0.,  1.,  2.,  3.,  4.],
   [ 5.,  6.,  7.,  8.,  9.],
   [10., 11., 12., 13., 14.],
   [15., 16., 17., 18., 19.],
   [20., 21., 22., 23., 24.]]]]
DimensionCount: 2
WindowSizes: {3, 3}
Strides: {1, 1}
Dilations: {1, 1}
StartPadding: {0, 0}
EndPadding: {0, 0}
OutputTensor: (Sizes:{1, 9, 9}, DataType:FLOAT32)
[[[ 0.,  1.,  2.,  5.,  6.,  7., 10., 11., 12.],
  [ 1.,  2.,  3.,  6.,  7.,  8., 11., 12., 13.],
  [ 2.,  3.,  4.,  7.,  8.,  9., 12., 13., 14.],
  [ 5.,  6.,  7., 10., 11., 12., 15., 16., 17.],
  [ 6.,  7.,  8., 11., 12., 13., 16., 17., 18.],
  [ 7.,  8.,  9., 12., 13., 14., 17., 18., 19.],
  [10., 11., 12., 15., 16., 17., 20., 21., 22.],
  [11., 12., 13., 16., 17., 18., 21., 22., 23.],
  [12., 13., 14., 17., 18., 19., 22., 23., 24.]]]

Ejemplo 2.

Plegado acolchado de 1 canal.

InputTensor: (Sizes:{1, 1, 5, 5}, DataType:FLOAT32)
[[[[ 0.,  1.,  2.,  3.,  4.],
   [ 5.,  6.,  7.,  8.,  9.],
   [10., 11., 12., 13., 14.],
   [15., 16., 17., 18., 19.],
   [20., 21., 22., 23., 24.]]]]
DimensionCount: 2
WindowSizes: {3, 3}
Strides: {1, 1}
Dilations: {1, 1}
StartPadding: {1, 0}
EndPadding: {1, 0}
OutputTensor: (Sizes:{1, 9, 15}, DataType:FLOAT32)
[[[ 0.,  0.,  0.,  0.,  1.,  2.,  5.,  6.,  7., 10., 11., 12., 15., 16., 17.],
  [ 0.,  0.,  0.,  1.,  2.,  3.,  6.,  7.,  8., 11., 12., 13., 16., 17., 18.],
  [ 0.,  0.,  0.,  2.,  3.,  4.,  7.,  8.,  9., 12., 13., 14., 17., 18., 19.],
  [ 0.,  1.,  2.,  5.,  6.,  7., 10., 11., 12., 15., 16., 17., 20., 21., 22.],
  [ 1.,  2.,  3.,  6.,  7.,  8., 11., 12., 13., 16., 17., 18., 21., 22., 23.],
  [ 2.,  3.,  4.,  7.,  8.,  9., 12., 13., 14., 17., 18., 19., 22., 23., 24.],
  [ 5.,  6.,  7., 10., 11., 12., 15., 16., 17., 20., 21., 22.,  0.,  0., 0.],
  [ 6.,  7.,  8., 11., 12., 13., 16., 17., 18., 21., 22., 23.,  0.,  0., 0.],
  [ 7.,  8.,  9., 12., 13., 14., 17., 18., 19., 22., 23., 24.,  0.,  0., 0.]]]

Disponibilidad

Este operador se introdujo en DML_FEATURE_LEVEL_6_4.

Restricciones tensor

InputTensor y OutputTensor deben tener el mismo DimensionCount.

Compatibilidad con Tensor

Tensor Variante Recuentos de dimensiones admitidos Supported data types (Tipos de datos admitidos)
InputTensor Entrada De 3 a 8
OutputTensor Salida De 3 a 8

Requisitos

   
Encabezado directml.h