Compartilhar via


estrutura DML_FOLD_OPERATOR_DESC (directml.h)

Combina uma matriz de patches formados de uma janela deslizante em um tensor grande contendo.

Considere um tensor de entrada em lote que contém blocos locais deslizantes, por exemplo, patches de imagens, de forma (N,C×∏(WindowSizes),BlockCount), em que N é a dimensão do lote, C×∏(WindowSizes) é o número de valores dentro de uma janela (uma janela tem locais espaciais ∏(WindowSizes) cada um contendo um vetor canal C) e BlockCount é o número total de blocos. Essa operação combina esses blocos locais no tensor de saída grande da forma (N,C, OutputSize[0],OutputSize[1],...) somando os valores sobrepostos. 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:

  • <0 = d < ContagemDimensão

O OutputSize (o tamanho de OutputTensor) descreve a forma espacial do tensor grande que contém os blocos locais deslizantes.

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_FOLD_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 ser <= 6.

WindowSizes

Tipo: _Field_size_(DimensionCount) const UINT*

O tamanho da janela deslizante. Tamanho do patch extraído.

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

Uma dobra de 1 canal.

InputTensor: (Sizes:{1, 9, 4}, 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., 25., 26., 27.],
  [28., 29., 30., 31.],
  [32., 33., 34., 35.]]]
DimensionCount: 2
WindowSizes: {3, 3}
Strides: {1, 1}
Dilations: {1, 1}
StartPadding: {0, 0}
EndPadding: {0, 0}
OutputTensor: (Sizes:{1, 1, 4, 4}, DataType:FLOAT32)
[[[[  0.,   5.,  13.,   9.],
   [ 14.,  38.,  54.,  32.],
   [ 38.,  86., 102.,  56.],
   [ 26.,  57.,  65.,  35.]]]]

Exemplo 2

Uma dobra acolchoável de 1 canal.

InputTensor: (Sizes:{1, 9, 8}, 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., 25., 26., 27., 28., 29., 30., 31.],
  [32., 33., 34., 35., 36., 37., 38., 39.],
  [40., 41., 42., 43., 44., 45., 46., 47.],
  [48., 49., 50., 51., 52., 53., 54., 55.],
  [56., 57., 58., 59., 60., 61., 62., 63.],
  [64., 65., 66., 67., 68., 69., 70., 71.]]]
DimensionCount: 2
WindowSizes: {3, 3}
Strides: {1, 1}
Dilations: {1, 1}
StartPadding: {1, 0}
EndPadding: {1, 0}
OutputTensor: (Sizes:{1, 1, 4, 4}, DataType:FLOAT32)
[[[[ 26.,  70., 102.,  60.],
   [ 78., 183., 231., 129.],
   [ 84., 195., 243., 135.],
   [ 82., 182., 214., 116.]]]]

Exemplo 3

Uma dobra acolchoável de dois canais.

InputTensor: (Sizes:{1, 18, 8}, 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.,  25.,  26.,  27.,  28.,  29.,  30.,  31.],
  [ 32.,  33.,  34.,  35.,  36.,  37.,  38.,  39.],
  [ 40.,  41.,  42.,  43.,  44.,  45.,  46.,  47.],
  [ 48.,  49.,  50.,  51.,  52.,  53.,  54.,  55.],
  [ 56.,  57.,  58.,  59.,  60.,  61.,  62.,  63.],
  [ 64.,  65.,  66.,  67.,  68.,  69.,  70.,  71.],
  [ 72.,  73.,  74.,  75.,  76.,  77.,  78.,  79.],
  [ 80.,  81.,  82.,  83.,  84.,  85.,  86.,  87.],
  [ 88.,  89.,  90.,  91.,  92.,  93.,  94.,  95.],
  [ 96.,  97.,  98.,  99., 100., 101., 102., 103.],
  [104., 105., 106., 107., 108., 109., 110., 111.],
  [112., 113., 114., 115., 116., 117., 118., 119.],
  [120., 121., 122., 123., 124., 125., 126., 127.],
  [128., 129., 130., 131., 132., 133., 134., 135.],
  [136., 137., 138., 139., 140., 141., 142., 143.]]]
DimensionCount: 2
WindowSizes: {3, 3}
Strides: {1, 1}
Dilations: {1, 1}
StartPadding: {1, 0}
EndPadding: {1, 0}
OutputTensor: (Sizes:{1, 2, 4, 4}, DataType:FLOAT32)
[[[[ 26.,  70., 102.,  60.],
   [ 78., 183., 231., 129.],
   [ 84., 195., 243., 135.],
   [ 82., 182., 214., 116.]],

  [[170., 358., 390., 204.],
   [294., 615., 663., 345.],
   [300., 627., 675., 351.],
   [226., 470., 502., 260.]]]]

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