• 文档 >
  • torch.nn >
  • torch.nn.utils.weight_norm
快捷键

torch.nn.utils.weight_norm

torch.nn.utils.weight_norm(module, name='weight', dim=0)[source][source]

将权重归一化应用于给定模块中的参数。

w=gvv\mathbf{w} = g \dfrac{\mathbf{v}}{\|\mathbf{v}\|}

权重归一化是一种将权重张量的幅度与其方向解耦的重参数化。这用两个参数替换了由 name 指定的参数(例如 'weight' ),一个指定幅度(例如 'weight_g' )和一个指定方向(例如 'weight_v' )。权重归一化通过一个钩子实现,该钩子在每次 forward() 调用之前从幅度和方向重新计算权重张量。

默认情况下,使用 dim=0 ,范数是独立于每个输出通道/平面的。要计算整个权重张量的范数,请使用 dim=None

请参阅 https://arxiv.org/abs/1602.07868

警告

此功能已弃用。请使用 torch.nn.utils.parametrizations.weight_norm() ,它使用现代参数化 API。新的 weight_norm 与由旧 state_dict 生成的 weight_norm 兼容。

迁移指南:

  • 现在将幅度( weight_g )和方向( weight_v )分别表示为 parametrizations.weight.original0parametrizations.weight.original1 。如果这让您感到困扰,请在此处评论:https://github.com/pytorch/pytorch/issues/102999

  • 要移除权重归一化重参数化,请使用 torch.nn.utils.parametrize.remove_parametrizations()

  • 模块的权重不再在模块前向传播时一次性重新计算;相反,它将在每次访问时重新计算。要恢复旧行为,请在调用相关模块之前使用 torch.nn.utils.parametrize.cached()

参数:
  • 模块(Module)- 包含模块

  • name(str,可选)- 权重参数的名称

  • dim(int,可选)- 计算范数的维度

返回值:

带权重范数钩子的原始模块

返回类型:

模块 T

示例:

>>> m = weight_norm(nn.Linear(20, 40), name='weight')
>>> m
Linear(in_features=20, out_features=40, bias=True)
>>> m.weight_g.size()
torch.Size([40, 1])
>>> m.weight_v.size()
torch.Size([40, 20])

© 版权所有 PyTorch 贡献者。

使用 Sphinx 构建,并使用 Read the Docs 提供的主题。

文档

PyTorch 的全面开发者文档

查看文档

教程

深入了解初学者和高级开发者的教程

查看教程

资源

查找开发资源并获得您的疑问解答

查看资源