评价此页

torch.nn.utils.spectral_norm#

torch.nn.utils.spectral_norm(module, name='weight', n_power_iterations=1, eps=1e-12, dim=None)[源代码]#

对给定模块中的参数应用谱归一化。

WSN=Wσ(W),σ(W)=maxh:h0Wh2h2\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}

谱归一化通过使用权重矩阵的谱范数 σ\sigma 对生成对抗网络 (GAN) 中的判别器 (critic) 进行训练稳定化,其中谱范数使用幂迭代法计算。如果权重张量的维度大于 2,则在幂迭代法中将其重塑为 2D 以获得谱范数。这是通过一个 hook 实现的,该 hook 在每次调用 forward() 之前计算谱范数并重新缩放权重。

请参阅 Spectral Normalization for Generative Adversarial Networks

参数
  • module (nn.Module) – 包含的模块

  • name (str, optional) – 权重参数的名称

  • n_power_iterations (int, optional) – 用于计算谱范数的幂迭代次数

  • eps (float, optional) – 计算范数时用于数值稳定性的 epsilon

  • dim (int, optional) – 对应于输出数量的维度,默认为 0,但对于 ConvTranspose{1,2,3}d 模块实例,则为 1

返回

带有谱归一化 hook 的原始模块

返回类型

T_module

注意

此函数已通过新的参数化功能 torch.nn.utils.parametrizations.spectral_norm() 进行了重新实现,该功能使用了 torch.nn.utils.parametrize.register_parametrization() 中的新参数化功能。请使用更新的版本。此函数将在未来的 PyTorch 版本中弃用。

示例

>>> m = spectral_norm(nn.Linear(20, 40))
>>> m
Linear(in_features=20, out_features=40, bias=True)
>>> m.weight_u.size()
torch.Size([40])