torch.nn.utils.weight_norm#
- torch.nn.utils.weight_norm(module, name='weight', dim=0)[source]#
对给定模块中的参数应用权重归一化。
权重归一化是一种重参数化技术,它将权重张量的幅度与其方向解耦。这会用两个参数替换由
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
与旧weight_norm
生成的state_dict
兼容。迁移指南
幅度(
weight_g
)和方向(weight_v
)现在分别表示为parametrizations.weight.original0
和parametrizations.weight.original1
。如果您对此感到困扰,请在 pytorch/pytorch#102999 上发表评论。要移除权重归一化重参数化,请使用
torch.nn.utils.parametrize.remove_parametrizations()
。权重不再在模块的 forward 调用时重新计算一次,而是每次访问时都会重新计算。要恢复旧行为,请在调用相关模块之前使用
torch.nn.utils.parametrize.cached()
。
- 参数
- 返回
原始模块(带有权重归一化钩子)
- 返回类型
T_module
示例
>>> 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])