Pooling
Pooling (input,
poolKind, # "max" or "average"
{kernel dimensions},
stride = {stride dimensions},
autoPadding = {padding flags (boolean)},
lowerPad = {lower padding (int)},
upperPad = {upper padding (int)})
Les opérations de regroupement calculent une nouvelle matrice en sélectionnant la valeur maximale (regroupement maximal) ou la valeur moyenne dans l’entrée de regroupement. Dans le cas d’un regroupement moyen, le nombre de valeurs moyennes n’inclut pas de valeurs rembourrées.
Le regroupement ndimensionnel permet de créer un regroupement maximal ou moyen de toutes dimensions, foulées ou remplissages. La syntaxe est :
où :
input
- mise en pool d’entréespoolKind
- « max » ou « average »{kernel dimensions}
- dimensions de la fenêtre de regroupement, en tant que vecteur BrainScript, par exemple(4:4)
.stride
- [nommé, facultatif, par défaut est de 1] pas à pas.autoPadding
- [nommé, facultatif, valeur par défaut est true] indicateurs de remplissage automatique pour chaque dimension d’entrée.lowerPad
- [nommé, facultatif, par défaut est 0] remplissage inférieur précis pour chaque dimension d’entréeupperPad
- [nommé, facultatif, par défaut est 0] remplissage supérieur précis pour chaque dimension d’entrée
Tous les tableaux de dimensions sont séparés par deux-points. Remarque : Si vous utilisez le déprécié NDLNetworkBuilder
, ceux-ci doivent être séparés par des virgules et placés à { }
la place.
Étant donné que la fenêtre de regroupement peut avoir des dimensions arbitraires, cela permet de créer différentes configurations de regroupement, par exemple, une couche « Maxout » (voir Goodfellow et al pour plus d’informations) :
MaxOutPool (inp, kW, kH, kC, hStride, vStride) =
Pooling (inp, "max", (kW:kH:kC), stride=(hStride:vStride:kC), true:true:false))
Syntaxe simplifiée pour le regroupement 2D
Il existe une syntaxe simplifiée pour le regroupement 2D :
MaxPooling(m, windowWidth, windowHeight, stepW, stepH, imageLayout="cudnn" /* or "HWC"*/ )
AveragePooling(m, windowWidth, windowHeight, stepW, stepH, imageLayout="cudnn" /* or "HWC"*/ )
avec les paramètres suivants :
m
- matrice d’entrée.windowWidth
- largeur de la fenêtre de regroupementwindowHeight
- hauteur de la fenêtre de regroupementstepW
- étape (ou pas) utilisée dans la direction de largeurstepH
- étape (ou pas) utilisée dans la direction de hauteurimageLayout
- [nommé facultatif] format de stockage de chaque image. Il s’agit d’une option héritée dont vous n’aurez probablement pas besoin. Par défaut, elleHWC
signifie que chaque image est stockée comme[channel, width, height]
dans la notation principale de colonne. Pour de meilleures performances, il est recommandé d’utiliser cuDNN dans le cas où vous devez le définircudnn
, ce qui signifie que chaque image est stockée en tant que [largeur, hauteur, canal] dans la notation principale de colonne. Notez que lecudnn
format fonctionne à la fois sur gpu et processeur.
Exemple (macro NDL ConvReLULayer) :
# pool2
pool2W = 2
pool2H = 2
pool2hStride = 2
pool2vStride = 2
pool2 = MaxPooling (conv2, pool2W, pool2H, pool2hStride, pool2vStride, imageLayout="$imageLayout$")
Remarque : Si vous utilisez le paramètre déconseillé NDLNetworkBuilder
, le paramètre facultatif imageLayout
est défini par défaut "HWC"
à la place.