Поделиться через


Pooling

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

Операции объединения пулов вычисляют новую матрицу, выбрав максимальное (максимальное значение пула) или среднее значение во входных данных пула. В случае среднего пула количество средних не включает заполненные значения.

N-размерное пулирование позволяет создавать максимальный или средний пул любых измерений, шаг или заполнение. Синтаксис:

Где:

  • input — входные данные в пуле
  • poolKind - "max" или "average"
  • {kernel dimensions} — измерения окна пула в виде вектора BrainScript, например (4:4).
  • stride — [именованный, необязательный, по умолчанию — 1] шагов.
  • autoPadding — [именованный, необязательный, по умолчанию — true] флаги автоматического заполнения для каждого входного измерения.
  • lowerPad — [именованный, необязательный, по умолчанию — 0] точное нижнее заполнение для каждого входного измерения.
  • upperPad — [именованный, необязательный, по умолчанию — 0] точная верхняя заполнение для каждого входного измерения.

Все массивы измерений разделены двоеточием. Примечание. Если вы используете нерекомендуемое NDLNetworkBuilder, они должны быть разделены запятыми и заключены в него { } .

Так как окно пула может иметь произвольные измерения, это позволяет создавать различные конфигурации пула, например слой Maxout (см. Goodfellow et al для получения дополнительных сведений):

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

Упрощенный синтаксис для 2D-пула

Существует упрощенный синтаксис для 2D-пула:

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

Поддерживаются следующие параметры:

  • m — входная матрица.
  • windowWidth — ширина окна пула
  • windowHeight — высота окна пула
  • stepW — шаг (или шаг), используемый в направлении ширины
  • stepH — шаг (или шаг), используемый в направлении высоты
  • imageLayout — [именованный необязательный] формат хранения каждого изображения. Это устаревший вариант, который, скорее всего, не потребуется. По умолчанию это HWCозначает, что каждое изображение хранится как [channel, width, height] в основной нотации столбца. Для повышения производительности рекомендуется использовать cuDNN в этом случае, чтобы задать для него значение cudnn, то есть каждое изображение хранится как [ширина, высота, канал] в основной нотации столбца. Обратите внимание, что cudnn формат работает как на GPU, так и на ЦП.

Пример (макрос NDL ConvReLULayer):

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

Примечание. Если вы используете нерекомендуемый NDLNetworkBuilderпараметр, необязательный imageLayout параметр по умолчанию используется "HWC" вместо него.