Pool3D

Описание

Info

Родительский класс: Module

Производные классы: MaxPool3D, AvgPool3D

Общая информация

Этот модуль реализует абстрактный класс трёхмерного пулинга.

Пулинг - это процесс нелинейного уплотнения исходного тензора путём применения заданной математической операции (усреднение или выбор максимума) к субтензорам исходного тензора. Таким образом, каждый элемент выходного тензора будет является результатом проведения выбранной операции над соответствующим субтензором.

В результате применения операции пулинга без использования специальных техник размерность карт выходного тензора меньше размерности карт исходного.

Для входного тензора с размерами (N, C, D_{in}, H_{in}, W_{in}) и выходного с размерами (N, C, D_{out}, H_{out}, W_{out}) операция проводится следующим образом (рассматриваем i-й элемент батча и j-ую карту):

out(N_i, C_j, d, h, w) = OP(input(N_i, C_j, stride_d \times d + t, stride_h \times h + m, stride_w \times w + n))

где

N - размер батча;
C - количество карт в тензоре;
H - размер карт по высоте;
W - размер карт по ширине;
stride_d, stride_h, stride_w - шаг пулинга вдоль глубины, высоты и ширины карт соответственно;
OP - операция усреденения \frac{1}{k_dk_hk_w}\sum_{t=0}^{k_d-1}\sum_{m=0}^{k_h-1}\sum_{n=0}^{k_w-1} или выбора максимума \max\limits_{t=0..k_d-1}\max\limits_{m=0..k_h-1}\max\limits_{n=0..k_w-1};
k_d, k_h, k_w - размер ядра пулинга по глубине, высоте и ширине соответственно.

Слой пулинга зачастую чередуются со слоями свёртки (см. ConvND). Пулинг, как было сказано выше, проводит нелинейное уплотнение карт признаков. При этом подразумевается следующее: если при предыдущей операции свертки выявился некоторый набор признаков, то для дальнейшей обработки подойдет и менее подробная карта; количество вычислений уменьшится, а точность работы модели практически не изменится. Другим положительным эффектом операции является уменьшение вероятности переобучения модели: модель обучается на более абстрактных формах представления объектов.

Параметры операции


Тип пулинга


Под типом пулинга подразумевается математическая операция, которая применяется к текущему субтензору. Традиционно этими математическими операциями являются вычисление среднего значения и вычисление максимума.


Размер ядра size


Размер ядра пулинга - это размер субтензора, над которым будет проводиться выбранная операция. Как правило, ядра трёхмерного пулинга выбираются кубическими.


Шаг пулинга stride


Шаг пулинга определяет, через какое количество элементов тензора ядро пулинга будет взаимодействовать с подмножеством элементов карты. Шаг, равный единице, означает, что ядро скользит непрерывно и не пропускает элементов. Шаг, равный двум, означает, что ядро идет через один элемент карты. Данная характеристика помогает уменьшить количество вычислений и размерность выходного тензора, работая с одними и теми же исходными данными.


Паддинг pad


Параметр паддинга определяет количество дополнительных слоев элементов по периметру исходного входного тензора, заполненных значениями по определенным правилам. Это позволяет избежать потери граничных элементов карт при определенных наборах остальных параметров.

Итоговая формула для подсчёта размера выходного тензора при трёхмерном пулинге:

\begin{equation} D_{out} = \frac{D_{in} + 2 \times pad_d - kernel_d}{stride_d} + 1 \end{equation}

\begin{equation} H_{out} = \frac{H_{in} + 2 \times pad_h - kernel_h}{stride_h} + 1 \end{equation}

\begin{equation} W_{out} = \frac{W_{in} + 2 \times pad_w - kernel_w}{stride_w} + 1 \end{equation}

Дополнительные источники

Дополнительные ссылки для ознакомления:

Инициализация

def __init__(self, size=2, stride=2, pad=0, name=None):

Параметры

Параметр Возможные типы Описание По умолчанию
size int Размер ядра 2
stride int Шаг пулинга 2
pad int Паддинг карт 0
name str Имя слоя None

Пояснения

См. классы потомки.