InstanceNorm2D¶
Описание¶
Этот модуль реализует операцию двумерной индивидуальной нормализации.
Индивидуальная нормализация применяется для обучения генеративных нейронных сетей, для которых нормализация по батчу оказывает негативное влияние и на скорость обучения, и на качество результата. В батч-нормализации статистики вычисляются по нескольким изображениям, из-за чего информация о каждом отдельном изображении теряется.
Тензор данных на входе в модуль имеет размерность (N, C, H, W), где N - размер батча, C - количество карт (каналов), H - высота карты, W - ширина карты. Условимся насчёт индексов: t - номер элемента батча, i - номер карты, m - номер элемента карты признаков по высоте, n - номер элемента карты признаков по ширине. Тогда для каждой отдельно взятой комбинации t-го элемента батча и i-ой карты признаков:
где
\mu_{ti} - математическое ожидание распределения признаков для отдельно взятой комбинации t-го элемента батча и i-ой карты признаков;
\sigma_{ti}^2 - дисперсия распределения признаков для отдельно взятой комбинации t-го элемента батча и i-ой карты признаков;
x_{timn} - элемент карты признаков;
\hat{x}_{timn} - нормализованный элемент карты признаков;
\epsilon - стабилизирующая константа, предотвращающая деление на ноль;
\gamma - аффинный параметр масштаб;
\beta - аффинный параметр сдвиг.
На практике, ограничение в лице нулевого мат ожидания и единичной дисперсии может сильно ограничить предсказательную способность сети, поэтому добавляются ещё два обучаемых аффинных параметра: масштаб и сдвиг, чтобы алгоритм мог подстроить под себя значения среднего и дисперсии.
Дополнительные источники¶
Инициализация¶
def __init__(self, numOfMaps, epsilon=1e-5, affine=True, name=None):
Параметры
Параметр | Возможные типы | Описание | По умолчанию |
---|---|---|---|
numOfMaps | int | Количество карт | - |
epsilon | float | Коэффициент малого сдвига | 1e-5 |
affine | bool | Использование аффинных преобразований | True |
name | str | Имя слоя | None |
Пояснения
affine
- флаг, который отвечает за то, будут ли scale
и bias
(масштаб и сдвиг) параметры слоя батч-нормализации обучаемыми, либо они будут зафиксированы (1 и 0 соответственно), в следствие чего слой будет проводить только операцию нормализации по среднему и дисперсии.
Примеры¶
Необходимые импорты.
import numpy as np
from PuzzleLib.Backend import gpuarray
from PuzzleLib.Modules import InstanceNorm2D
Info
gpuarray
необходим для правильного размещения тензора на GPU
batchsize, maps, h, w = 5, 3, 4, 4
data = gpuarray.to_gpu(np.random.randn(batchsize, maps, h, w).astype(np.float32))
instNorm2d = InstanceNorm2D(numOfMaps=maps)
instNorm2d(data)