Pool1D

Описание

Info

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

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

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

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

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

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

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

out(N_i, C_j, l) = OP(input(N_i, C_j, stride \times l + m))

где

N - размер батча;
C - количество карт в тензоре;
L - размер последовательности;
OP - операция усреденения \frac{1}{k}\sum_{m=0}^{k-1} или выбора максимума \max\limits_{m=0..k-1};
stride - шаг пулинга;
k - размер окна пулинга.

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

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


Тип пулинга


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

Усредняющий пулинг
Рисунок 1. Усредняющий пулинг

Максимизирующий пулинг
Рисунок 1. Максимизирующий пулинг


Размер ядра size


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


Шаг пулинга stride


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


Паддинг pad


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

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

L_{out} = \frac{L_{in} + 2 \times pad - kernel}{stride} + 1

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

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

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

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

Параметры

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

Пояснения

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