Partilhar via


DML_UNFOLD_OPERATOR_DESC estrutura (directml.h)

Extrai blocos locais deslizantes de um tensor de entrada em lote.

Considere um InputTensor com forma (N,C,*), onde * é um número arbitrário de dimensões espaciais (<=6). A operação nivela cada bloco deslizante WindowSize'd dentro do InputTensor em uma coluna de um OutputTensor. O OutputTensor é um tensor 3D contendo blocos locais deslizantes, por exemplo, patches de imagens, de forma (N,C×∏(WindowSizes),BlockCount), onde N é a dimensão do lote, C×∏(WindowSizes) é o número de valores dentro de uma janela (uma janela tem ∏(WindowSizes) localizações espaciais cada uma contendo um vetor C-canalizado), e BlockCount é o número total de blocos. Os argumentos devem satisfazer:

BlocksPerDimension[d] = ( ( SpatialSize[d] + StartPadding[d] + EndPadding[d] - Dilatações[d] * (WindowSizes[d] - 1) - 1 ) / stride[d] ) + 1

BlockCount = ∏d BlocksPerDimension[d]

Onde:

  • SpatialSize é formado pelas dimensões espaciais de entrada (*)
  • <0 = d < DimensionCount

A saída de indexação na última dimensão (dimensão coluna) fornece todos os valores dentro de um determinado bloco.

Os argumentos StartPadding, EndPadding, Strides e Dilatations 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 o 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 para ler.

OutputTensor

Tipo: const DML_TENSOR_DESC*

O tensor de saída para 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*

A passada 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 do passo dos adesivos extraídos.

Dilations

Tipo: _Field_size_(DimensionCount) const UINT*

As dilatações da janela deslizante (com dimensões WindowSizes) nas dimensões espaciais de entrada, escalando o espaço entre os pontos do kernel. Dilatações do adesivo extraído.

StartPadding

Tipo: _Field_size_(DimensionCount) const UINT*

Uma matriz contendo a quantidade de preenchimento zero implícito a ser aplicado ao início de cada dimensão espacial de InputTensor. Inicie o preenchimento do tensor de origem.

EndPadding

Tipo: _Field_size_(DimensionCount) const UINT*

Uma matriz contendo a quantidade de preenchimento zero implícito a ser aplicado ao final de cada dimensão espacial de 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.

1 canal, dobra acolchoada.

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

Este operador foi introduzido em DML_FEATURE_LEVEL_6_4.

Restrições de tensores

InputTensor e OutputTensor devem ter o mesmo DimensionCount.

Suporte tensor

Tensor Amável Contagens de dimensões suportadas Tipos de dados suportados
InputTensor Entrada 3 a 8 anos
OutputTensor Resultado 3 a 8 anos

Requerimentos

   
Cabeçalho DirectML.H