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 poolingpoolKind
- "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 inputupperPad
- [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 poolingwindowHeight
- altezza della finestra di poolingstepW
- passaggio (o stride) usato nella direzione della larghezzastepH
- passaggio (o stride) usato nella direzione dell'altezzaimageLayout
- [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 sucudnn
, 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 checudnn
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"
.