Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 |