Partilhar via


Agrupamento

Pooling (input,
         poolKind, # "max" or "average"
         {kernel dimensions}, 
         stride = {stride dimensions}, 
         autoPadding = {padding flags (boolean)},
         lowerPad = {lower padding (int)},
         upperPad = {upper padding (int)})

As operações de agrupamento calculam uma nova matriz selecionando o valor máximo (máximo de pooling) ou o valor médio na entrada de pooling. No caso de agrupamento médio, a contagem média não inclui valores acolchoados.

O agrupamento n-dimensional permite criar uma piscina máxima ou média de quaisquer dimensões, passos ou estofos. A sintaxe é:

em que:

  • input - entrada de agrupamento
  • poolKind - "max" ou "médio"
  • {kernel dimensions}- dimensões da janela de agrupamento, como vetor BrainScript, por exemplo. (4:4)
  • stride - [nomeado, opcional, o incumprimento é 1] passos.
  • autoPadding - [nomeado, opcional, o padrão é verdadeiro] bandeiras de enchimento automática para cada dimensão de entrada.
  • lowerPad - [nomeado, opcional, o padrão é 0] estofamento inferior preciso para cada dimensão de entrada
  • upperPad - [nomeado, opcional, o predefinimento é 0] estofamento superior preciso para cada dimensão de entrada

Todas as dimensões são separadas pelo cólon. Nota: Se utilizar o precintado NDLNetworkBuilder, estes devem ser separados em vírgula e fechados { } em vez disso.

Uma vez que a janela de agrupamento pode ter dimensões arbitrárias, isto permite construir várias configurações de pooling, por exemplo, uma camada "Maxout" (ver Goodfellow et al para mais detalhes):

MaxOutPool (inp, kW, kH, kC, hStride, vStride) =
    Pooling (inp, "max", (kW:kH:kC), stride=(hStride:vStride:kC), true:true:false))

Sintaxe simplificada para agrupamento 2D

Existe uma sintaxe simplificada para o agrupamento 2D:

MaxPooling(m, windowWidth, windowHeight, stepW, stepH, imageLayout="cudnn" /* or "HWC"*/ )
AveragePooling(m, windowWidth, windowHeight, stepW, stepH, imageLayout="cudnn" /* or "HWC"*/ )

com os seguintes parâmetros:

  • m - a matriz de entrada.
  • windowWidth - largura da janela de piscina
  • windowHeight - altura da janela de piscina
  • stepW - passo (ou passo) utilizado na direção da largura
  • stepH - passo (ou passo) utilizado na direção da altura
  • imageLayout - [nomeado opcional] o formato de armazenamento de cada imagem. Esta é uma opção antiga que provavelmente não vai precisar. Por padrão é , o HWCque significa que cada imagem é armazenada como [channel, width, height] na notação principal da coluna. Para um melhor desempenho, recomenda-se a utilização de cuDNN, caso em que deve defini-lo para cudnn, o que significa que cada imagem é armazenada como [largura, altura, canal] na notação principal da coluna. Note que o cudnn formato funciona tanto na GPU como na CPU.

Exemplo (ConvReLULayer NDL macro):

# pool2
pool2W = 2
pool2H = 2
pool2hStride = 2
pool2vStride = 2
pool2 = MaxPooling (conv2, pool2W, pool2H, pool2hStride, pool2vStride, imageLayout="$imageLayout$")

Nota: Se estiver a utilizar o deprecisado NDLNetworkBuilder, o parâmetro opcional imageLayout é o mais predefinido "HWC" .