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"
вместо него.