torch.nn.utils.weight_norm¶
- torch.nn.utils.weight_norm(module, name='weight', dim=0)[source][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
与由旧state_dict
生成的weight_norm
兼容。迁移指南:
现在将幅度(
weight_g
)和方向(weight_v
)分别表示为parametrizations.weight.original0
和parametrizations.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])