estrutura DML_CONVOLUTION_OPERATOR_DESC (directml.h)

Executa uma convolução do FilterTensor com o InputTensor. Esse operador dá suporte a várias configurações de convolução padrão. Essas configurações padrão incluem convolução para frente e para trás (transposta) definindo os campos Direção e Modo , bem como convolução em termos de profundidade definindo o campo GroupCount .

Um resumo das etapas envolvidas: executar a convolução no tensor de saída; remodelar o viés para os mesmos tamanhos de dimensão que o tensor de saída; adicione o tensor de viés remodelado ao tensor de saída.

Sintaxe

struct DML_CONVOLUTION_OPERATOR_DESC {
  const DML_TENSOR_DESC     *InputTensor;
  const DML_TENSOR_DESC     *FilterTensor;
  const DML_TENSOR_DESC     *BiasTensor;
  const DML_TENSOR_DESC     *OutputTensor;
  DML_CONVOLUTION_MODE      Mode;
  DML_CONVOLUTION_DIRECTION Direction;
  UINT                      DimensionCount;
  const UINT                *Strides;
  const UINT                *Dilations;
  const UINT                *StartPadding;
  const UINT                *EndPadding;
  const UINT                *OutputPadding;
  UINT                      GroupCount;
  const DML_OPERATOR_DESC   *FusedActivation;
};

Membros

InputTensor

Tipo: const DML_TENSOR_DESC*

Um tensor que contém os dados de entrada. As dimensões esperadas do InputTensor são:

  • { BatchCount, InputChannelCount, InputWidth } para 3D,
  • { BatchCount, InputChannelCount, InputHeight, InputWidth } para 4D e
  • { BatchCount, InputChannelCount, InputDepth, InputHeight, InputWidth } para 5D.

FilterTensor

Tipo: const DML_TENSOR_DESC*

Um tensor que contém os dados do filtro. As dimensões esperadas do FilterTensor são:

  • { FilterBatchCount, FilterChannelCount, FilterWidth } para 3D,
  • { FilterBatchCount, FilterChannelCount, FilterHeight, FilterWidth } para 4D e
  • { FilterBatchCount, FilterChannelCount, FilterDepth, FilterHeight, FilterWidth } para 5D.

BiasTensor

Tipo: _Maybenull_ const DML_TENSOR_DESC*

Um tensor opcional que contém os dados de viés. O tensor de viés é um tensor que contém dados que são transmitidos pelo tensor de saída no final da convolução que é adicionado ao resultado. As dimensões esperadas do BiasTensor são:

  • { 1, OutputChannelCount, 1 } para 3D,
  • { 1, OutputChannelCount, 1, 1 } para 4D e
  • { 1, OutputChannelCount, 1, 1, 1 } para 5D.

Para cada canal de saída, o valor de viés único para esse canal é adicionado a todos os elementos nesse canal do OutputTensor. Ou seja, BiasTensor é transmitido para o tamanho do OutputTensor e o que o operador retorna é a soma desse BiasTensor difundido com o resultado da convolução.

OutputTensor

Tipo: const DML_TENSOR_DESC*

Um tensor para o qual gravar os resultados. As dimensões esperadas do OutputTensor são:

  • { BatchCount, OutputChannelCount, OutputWidth } para 3D,
  • { BatchCount, OutputChannelCount, OutputHeight, OutputWidth } para 4D e
  • { BatchCount, OutputChannelCount, OutputDepth, OutputHeight, OutputWidth } para 5D.

Mode

Tipo: DML_CONVOLUTION_MODE

O modo a ser usado para a operação de convolução. DML_CONVOLUTION_MODE_CROSS_CORRELATION é o comportamento necessário para cenários de inferência típicos. Por outro lado, DML_CONVOLUTION_MODE_CONVOLUTION inverte a ordem dos elementos em cada kernel de filtro em cada dimensão espacial.

Direction

Tipo: DML_CONVOLUTION_DIRECTION

A direção da operação de convolução. DML_CONVOLUTION_DIRECTION_FORWARD é a forma primária de convolução usada para inferência em que uma combinação de DML_CONVOLUTION_DIRECTION_FORWARD e DML_CONVOLUTION_DIRECTION_BACKWARD são usadas durante o treinamento.

DimensionCount

Tipo: UINT

O número de dimensões espaciais para a operação de convolução. Dimensões espaciais são as dimensões inferiores do FilterTensor de convolução. Por exemplo, a dimensão largura e altura são dimensões espaciais de um tensor de filtro de convolução 4D. Esse valor também determina o tamanho das matrizes Strides, Dilations, StartPadding, EndPadding e OutputPadding . Ele deve ser definido como 2 quando InputTensor.DimensionCount for 4 e 3 quando InputTensor.DimensionCount for 5.

Strides

Tipo: _Field_size_(DimensionCount) const UINT*

Uma matriz que contém os passos da operação de convolução. Esses passos são aplicados ao filtro de convolução. Eles são separados dos passos tensores incluídos em DML_TENSOR_DESC.

Dilations

Tipo: _Field_size_(DimensionCount) const UINT*

Uma matriz que contém as vibrações da operação de convolução. As vibrações são passos aplicados aos elementos do kernel de filtro. Isso tem o efeito de simular um kernel de filtro maior preenchendo os elementos de kernel de filtro interno com zeros.

StartPadding

Tipo: _Field_size_(DimensionCount) const UINT*

Uma matriz que contém os valores de preenchimento a serem aplicados ao início de cada dimensão espacial do filtro e tensor de entrada da operação de convolução. Os valores de preenchimento inicial são interpretados de acordo com o campo Direção .

EndPadding

Tipo: _Field_size_(DimensionCount) const UINT*

Uma matriz que contém os valores de preenchimento a serem aplicados ao final de cada dimensão espacial do filtro e tensor de entrada da operação de convolução. Os valores de preenchimento final são interpretados de acordo com o campo Direção .

OutputPadding

Tipo: _Field_size_(DimensionCount) const UINT*

Uma matriz que contém o preenchimento de saída da operação de convolução. OutputPadding aplica um preenchimento zero ao resultado da convolução. Esse preenchimento é aplicado ao final de cada dimensão espacial do tensor de saída.

GroupCount

Tipo: UINT

O número de grupos nos quais dividir a operação de convolução. Isso pode ser usado para obter convolução detalhada definindo GroupCount igual à contagem de canais de entrada e Direção igual a DML_CONVOLUTION_DIRECTION_FORWARD. Isso divide a convolução em uma convolução separada por canal de entrada.

FusedActivation

Tipo: _Maybenull_ const DML_OPERATOR_DESC*

Uma camada de ativação fundida opcional a ser aplicada após a convolução. Para obter mais informações, consulte Usando operadores fundidos para melhorar o desempenho.

Interações de modo

Modo de convolução Direção da convolução Orientação de filtro
DML_CONVOLUTION_MODE_CROSS_CORRELATION DML_CONVOLUTION_DIRECTION_FORWARD o filtro tem orientação de identidade
DML_CONVOLUTION_MODE_CROSS_CORRELATION DML_CONVOLUTION_DIRECTION_BACKWARD o filtro é transposto ao longo de eixos x,y
DML_CONVOLUTION_MODE_CONVOLUTION DML_CONVOLUTION_DIRECTION_FORWARD o filtro é transposto ao longo de eixos x,y
DML_CONVOLUTION_MODE_CONVOLUTION DML_CONVOLUTION_DIRECTION_BACKWARD o filtro tem orientação de identidade

Disponibilidade

Esse operador foi introduzido em DML_FEATURE_LEVEL_1_0.

Restrições do Tensor

BiasTensor, FilterTensor, InputTensor e OutputTensor devem ter os mesmos DataType e DimensionCount.

Suporte ao Tensor

DML_FEATURE_LEVEL_4_0 e superior

Tensor Tipo Dimensões Contagens de dimensões com suporte Tipos de dados com suporte
InputTensor Entrada { BatchCount, InputChannelCount, [InputDepth], [InputHeight], InputWidth } 3 a 5 FLOAT32, FLOAT16
FilterTensor Entrada { FilterBatchCount, FilterChannelCount, [FilterDepth], [FilterHeight], FilterWidth } 3 a 5 FLOAT32, FLOAT16
BiasTensor Entrada opcional { 1, OutputChannelCount, [1], [1], 1 } 3 a 5 FLOAT32, FLOAT16
OutputTensor Saída { BatchCount, OutputChannelCount, [OutputDepth], [OutputHeight], OutputWidth } 3 a 5 FLOAT32, FLOAT16

DML_FEATURE_LEVEL_1_0 e superior

Tensor Tipo Dimensões Contagens de dimensões com suporte Tipos de dados com suporte
InputTensor Entrada { BatchCount, InputChannelCount, [InputDepth], InputHeight, InputWidth } 4 a 5 FLOAT32, FLOAT16
FilterTensor Entrada { FilterBatchCount, FilterChannelCount, [FilterDepth], FilterHeight, FilterWidth } 4 a 5 FLOAT32, FLOAT16
BiasTensor Entrada opcional { 1, OutputChannelCount, [1], 1, 1 } 4 a 5 FLOAT32, FLOAT16
OutputTensor Saída { BatchCount, OutputChannelCount, [OutputDepth], OutputHeight, OutputWidth } 4 a 5 FLOAT32, FLOAT16

Requisitos

Requisito Valor
Cabeçalho directml.h

Confira também