Compartilhar 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 pool calculam uma nova matriz selecionando o valor máximo (pool máximo) ou médio na entrada de pool. No caso do agrupamento médio, a contagem de média não inclui valores acolchoados.

O pooling unidimensional permite criar um pool máximo ou médio de qualquer dimensão, passo ou preenchimento. A sintaxe do é:

em que:

  • input – entrada de pool
  • poolKind - "max" ou "average"
  • {kernel dimensions} – dimensões da janela de pooling, como um vetor BrainScript, por exemplo. (4:4).
  • stride - [nomeado, opcional, padrão é 1] passos.
  • autoPadding - [nomeado, opcional, padrão é verdadeiro] sinalizadores de preenchimento automático para cada dimensão de entrada.
  • lowerPad - [nomeado, opcional, o padrão é 0] preenchimento inferior preciso para cada dimensão de entrada
  • upperPad - [nomeado, opcional, padrão é 0] preenchimento superior preciso para cada dimensão de entrada

Todas as matrizes de dimensões são separadas por dois pontos. Observação: se você usar o preterido NDLNetworkBuilder, eles deverão ser separados por vírgula e colocados entre { } nós.

Como a janela de pool pode ter dimensões arbitrárias, isso permite criar várias configurações de pooling, por exemplo, uma camada "Maxout" (consulte Goodfellow et al para obter detalhes):

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

Sintaxe simplificada para pooling 2D

Há uma sintaxe simplificada para o pooling 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 pooling
  • windowHeight - altura da janela de pooling
  • stepW - etapa (ou passo) usada na direção da largura
  • stepH - etapa (ou passo) usada na direção da altura
  • imageLayout - [nomeado opcional] o formato de armazenamento de cada imagem. Essa é uma opção herdada que você provavelmente não precisará. Por padrão, significa HWCque cada imagem é armazenada como [channel, width, height] na notação principal da coluna. Para obter um melhor desempenho, é recomendável usar cuDNN nesse caso para o qual você deve defini-la cudnn, o que significa que cada imagem é armazenada como [largura, altura, canal] na notação principal da coluna. Observe que o cudnn formato funciona tanto na GPU quanto na CPU.

Exemplo (macro NDL ConvReLULayer):

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

Observação: se você estiver usando o preteridoNDLNetworkBuilder, o parâmetro opcional imageLayout será o padrão."HWC"