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 poolpoolKind
- "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 entradaupperPad
- [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 poolingwindowHeight
- altura da janela de poolingstepW
- etapa (ou passo) usada na direção da largurastepH
- etapa (ou passo) usada na direção da alturaimageLayout
- [nomeado opcional] o formato de armazenamento de cada imagem. Essa é uma opção herdada que você provavelmente não precisará. Por padrão, significaHWC
que 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-lacudnn
, o que significa que cada imagem é armazenada como [largura, altura, canal] na notação principal da coluna. Observe que ocudnn
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"