Teilen über


Pooling

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

Die Poolvorgänge berechnen eine neue Matrix, indem Sie den maximalen (max. Pooling) oder den Mittelwert in der Pooleingabe auswählen. Bei durchschnittlichen Pooling enthält die Anzahl des Mittelwerts keine gepolsterten Werte.

N-dimensionale Pooling ermöglicht das Erstellen von max. oder durchschnittlichem Pooling beliebiger Dimensionen, Stride oder Abstand. Die Syntax ist:

Dabei gilt:

  • input - Pooling-Eingabe
  • poolKind - "max" oder "Mittelwert"
  • {kernel dimensions} - Abmessungen des Poolfensters, als BrainScript-Vektor, z. B. (4:4).
  • stride - [benannt, optional, Standard ist 1] Strides.
  • autoPadding - [benannt, optional, Standard ist wahr] automatische Abstandskennzeichnungen für jede Eingabedimension.
  • lowerPad - [benannt, optional, Standard ist 0] präziser niedrigerer Abstand für jede Eingabedimension
  • upperPad - [benannt, optional, Standard ist 0] präzise oberer Abstand für jede Eingabedimension

Alle Dimensionsarrays sind doppeltrennt. Hinweis: Wenn Sie die veraltete NDLNetworkBuilderVersion verwenden, müssen sie stattdessen durch Kommas getrennt und eingeschlossen { } werden.

Da das Poolingfenster beliebige Dimensionen aufweisen kann, kann dies verschiedene Poolkonfigurationen erstellen, z. B. eine "Maxout"-Ebene (siehe Goodfellow et al ).

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

Vereinfachte Syntax für 2D-Pooling

Es gibt eine vereinfachte Syntax für 2D-Pooling:

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

Mit den folgenden Parameter aus:

  • m - die Eingabematrix.
  • windowWidth - Breite des Poolfensters
  • windowHeight - Höhe des Poolfensters
  • stepW - Schritt (oder Stride), der in der Breite richtung verwendet wird
  • stepH - Schritt (oder Stride), der in der Höhenrichtung verwendet wird
  • imageLayout - [benannt] das Speicherformat jedes Bilds. Dies ist eine Legacyoption, die Sie wahrscheinlich nicht benötigen. Standardmäßig ist es HWC, was bedeutet, dass jedes Bild wie [channel, width, height] in der Spalten-Hauptnotation gespeichert wird. Für eine bessere Leistung wird empfohlen, cuDNN zu verwenden, in diesem Fall sollten Sie es cudnnauf festlegen, was bedeutet, dass jedes Bild als [Breite, Höhe, Kanal] in der Hauptnotation von Spalten gespeichert wird. Beachten Sie, dass cudnn das Format sowohl auf GPU als auch auf CPU funktioniert.

Beispiel (ConvReLULayer NDL-Makro):

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

Hinweis: Wenn Sie stattdessen den veralteten NDLNetworkBuilderParameter verwenden, wird stattdessen "HWC" der optionale imageLayout Parameter verwendet.