Partager via


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ées
  • poolKind - « 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ée
  • upperPad - [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 regroupement
  • windowHeight - hauteur de la fenêtre de regroupement
  • stepW - étape (ou pas) utilisée dans la direction de largeur
  • stepH - étape (ou pas) utilisée dans la direction de hauteur
  • imageLayout - [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, elle HWCsignifie 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éfinir cudnn, ce qui signifie que chaque image est stockée en tant que [largeur, hauteur, canal] dans la notation principale de colonne. Notez que le cudnn 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.