Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Extrai blocos locais deslizantes de um tensor de entrada em lote.
Considere um InputTensor com forma (N,C,*), em que * é um número arbitrário de dimensões espaciais (<=6). A operação nivela cada bloco WindowSize'd deslizante dentro do InputTensor em uma coluna de um OutputTensor. O OutputTensor é um tensor 3D que contém blocos locais deslizantes, por exemplo, patches de imagens, de forma (N,C×∏(WindowSizes),BlockCount), em que N é dimensão de lote, C×∏(WindowSizes) é o número de valores dentro de uma janela (uma janela tem locais espaciais ∏(WindowSizes) cada um contendo um vetor canalizado por C) e BlockCount é o número total de blocos. Os argumentos devem satisfazer:
BlocksPerDimension[d] = ( SpatialSize[d] + StartPadding[d] + EndPadding[d] - Dilations[d] * (WindowSizes[d] - 1) - 1 ) / stride[d] ) + 1
BlockCount = ∏d BlocksPerDimension[d]
Em que:
- SpatialSize é formado pelas dimensões espaciais de entrada (*)
- <0 = d < ContagemDimensão
A indexação da saída na última dimensão (dimensão da coluna) fornece todos os valores em um determinado bloco.
Os argumentos StartPadding, EndPadding, Strides e Dilations especificam como os blocos deslizantes são recuperados.
Importante
Essa API está disponível como parte do pacote redistribuível autônomo do DirectML (consulte Microsoft.AI.DirectML versão 1.15.1 e posterior. Consulte também de histórico de versões do DirectML.
Sintaxe
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;
};
Membros
InputTensor
Tipo: const DML_TENSOR_DESC*
O tensor de entrada do qual ler.
OutputTensor
Tipo: const DML_TENSOR_DESC*
O tensor de saída para o qual gravar os resultados.
DimensionCount
Tipo: UINT
As dimensões espaciais do InputTensor.
DimensionCount deve estar no intervalo [1, 6].
WindowSizes
Tipo: _Field_size_(DimensionCount) const UINT*
O tamanho da janela deslizante.
Strides
Tipo: _Field_size_(DimensionCount) const UINT*
O passo da janela deslizante (com dimensões WindowSizes) nas dimensões espaciais de entrada. Eles são separados dos passos tensores incluídos em DML_TENSOR_DESC. Tamanho da etapa dos patches extraídos.
Dilations
Tipo: _Field_size_(DimensionCount) const UINT*
As vibrações da janela deslizante (com dimensões WindowSizes) nas dimensões espaciais de entrada, dimensionando o espaço entre os pontos do kernel. Vibrações do patch extraído.
StartPadding
Tipo: _Field_size_(DimensionCount) const UINT*
Uma matriz que contém a quantidade de preenchimento zero implícito a ser aplicado ao início de cada dimensão espacial do InputTensor. Inicie o preenchimento do tensor de origem.
EndPadding
Tipo: _Field_size_(DimensionCount) const UINT*
Uma matriz que contém a quantidade de preenchimento zero implícito a ser aplicado ao final de cada dimensão espacial do InputTensor. Preenchimento final do tensor de origem.
Exemplos
Exemplo 1.
Desdobramento 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: {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.]]]
Exemplo 2.
Dobra acolchoável 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.]]]
Disponibilidade
Esse operador foi introduzido no DML_FEATURE_LEVEL_6_4.
Restrições do Tensor
InputTensor e OutputTensor devem ter o mesmo DimensionCount.
Suporte ao Tensor
| Tensor | Tipo | Contagens de dimensões com suporte | Tipos de dados com suporte |
|---|---|---|---|
| Tensor de entrada | Entrada | 3 a 8 | |
| Tensor de saída | Saída | 3 a 8 |
Requisitos
| cabeçalho | directml.h |