Spec-Zone.ru › PyTorch 2.14

torch.nn.utils.parametrizations.spectral_norm

torch.nn.utils.parametrizations.spectral_norm(module, name='weight', n_power_iterations=1, eps=1e-12, dim=None) [исходный код]

Применяет спектральную нормализацию к параметру указанного модуля.

WSN=Wσ(W),σ(W)=max⁡h:h≠0∥Wh∥2∥h∥2\mathbf{W}_{SN} = \dfrac{\mathbf{W}}{\sigma(\mathbf{W})}, \sigma(\mathbf{W}) = \max_{\mathbf{h}: \mathbf{h} \ne 0} \dfrac{\|\mathbf{W} \mathbf{h}\|_2}{\|\mathbf{h}\|_2}

При применении к вектору выражение упрощается до

xSN=x∥x∥2\mathbf{x}_{SN} = \dfrac{\mathbf{x}}{\|\mathbf{x}\|_2}

Спектральная нормализация стабилизирует обучение дискриминаторов (критиков) в генеративно-состязательных сетях (GAN), уменьшая константу Липшица модели. σ\sigma аппроксимируется одним шагом степенного метода при каждом обращении к весу. Если размерность тензора весов больше 2, в степенном методе итераций он преобразуется в двумерный тензор для вычисления спектральной нормы.

См. статью Спектральная нормализация для генеративно-состязательных сетей .

Примечание

Эта функция реализована с использованием функциональности параметризации в register_parametrization(). Это повторная реализация torch.nn.utils.spectral_norm().

Примечание

При регистрации этого ограничения сингулярные векторы, соответствующие наибольшему сингулярному значению, оцениваются, а не выбираются случайным образом. Затем они обновляются с помощью n_power_iterations степенного метода всякий раз, когда происходит обращение к тензору, а модуль находится в режиме training.

Примечание

Если модуль _SpectralNorm, то есть module.parametrization.weight[idx], при удалении находится в режиме обучения, будет выполнена ещё одна итерация степенного метода. Чтобы избежать этой итерации, перед удалением переключите модуль в режим оценки.

Параметры:
  • module (nn.Module) – содержащий модуль
  • name (str, необязательный) – имя параметра весов. По умолчанию: "weight".
  • n_power_iterations (int, необязательный) – количество итераций степенного метода для вычисления спектральной нормы. По умолчанию: 1.
  • eps (float, необязательный) – эпсилон для численной устойчивости при вычислении норм. По умолчанию: 1e-12.
  • dim (int, необязательный) – размерность, соответствующая количеству выходов. По умолчанию: 0, кроме модулей, являющихся экземплярами ConvTranspose{1,2,3}d, для которых это значение равно 1
Возвращает:

Исходный модуль с новой параметризацией, зарегистрированной для указанного веса

Тип возвращаемого значения:

Module

Пример:

>>> snm = spectral_norm(nn.Linear(20, 40))
>>> snm
ParametrizedLinear(
  in_features=20, out_features=40, bias=True
  (parametrizations): ModuleDict(
    (weight): ParametrizationList(
      (0): _SpectralNorm()
    )
  )
)
>>> torch.linalg.matrix_norm(snm.weight, 2)
tensor(1.0081, grad_fn=<AmaxBackward0>)

© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/generated/torch.nn.utils.parametrizations.spectral_norm.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API