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 |