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 agrupamentopoolKind
- "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 entradaupperPad
- [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 piscinawindowHeight
- altura da janela de piscinastepW
- passo (ou passo) utilizado na direção da largurastepH
- passo (ou passo) utilizado na direção da alturaimageLayout
- [nomeado opcional] o formato de armazenamento de cada imagem. Esta é uma opção antiga que provavelmente não vai precisar. Por padrão é , oHWC
que 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 paracudnn
, o que significa que cada imagem é armazenada como [largura, altura, canal] na notação principal da coluna. Note que ocudnn
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"
.