Condividi tramite


Pooling

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

Le operazioni di pooling calcolano una nuova matrice selezionando il valore massimo (max pooling) o medio nell'input di pooling. Nel caso del pooling medio, il conteggio della media non include valori spaziati.

Il pooling ndimensionale consente di creare un pool massimo o medio di qualsiasi dimensione, sride o riempimento. La sintassi è:

dove:

  • input - Input di pooling
  • poolKind - "max" o "media"
  • {kernel dimensions} - dimensioni della finestra di pooling, come vettore BrainScript, ad esempio (4:4).
  • stride - [denominato, facoltativo, predefinito è 1] stride.
  • autoPadding - [denominato, facoltativo, predefinito è true] Flag di riempimento automatico per ogni dimensione di input.
  • lowerPad - [denominato, facoltativo, predefinito è 0] riempimento inferiore preciso per ogni dimensione di input
  • upperPad - [denominato, facoltativo, predefinito è 0] riempimento superiore preciso per ogni dimensione di input

Tutte le matrici di dimensioni sono separate da due punti. Nota: se si usa il deprecato NDLNetworkBuilder, questi devono essere separati da virgole e racchiusi invece { } .

Poiché la finestra di pooling può avere dimensioni arbitrarie, ciò consente di creare varie configurazioni di pooling, ad esempio un livello "Maxout" (vedere Goodfellow et al per informazioni dettagliate):

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

Sintassi semplificata per il pooling 2D

Esiste una sintassi semplificata per il pooling 2D:

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

con i parametri seguenti:

  • m - matrice di input.
  • windowWidth - larghezza della finestra di pooling
  • windowHeight - altezza della finestra di pooling
  • stepW - passaggio (o stride) usato nella direzione della larghezza
  • stepH - passaggio (o stride) usato nella direzione dell'altezza
  • imageLayout - [denominato facoltativo] il formato di archiviazione di ogni immagine. Questa è un'opzione legacy che probabilmente non sarà necessaria. Per impostazione predefinita, è HWC, il che significa che ogni immagine viene archiviata come [channel, width, height] nella notazione principale della colonna. Per migliorare le prestazioni, è consigliabile usare cuDNN in cui è consigliabile impostarlo su cudnn, il che significa che ogni immagine viene archiviata come [larghezza, altezza, canale] nella notazione principale della colonna. Si noti che il formato funziona sia sulla GPU che cudnn sulla CPU.

Esempio (macro NDL ConvReLULayer):

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

Nota: se si usa il parametro deprecato NDLNetworkBuilder, il parametro facoltativo imageLayout viene predefinito invece "HWC" .