torch.nn.utils.weight_norm¶
- torch.nn.utils.weight_norm(module, name='weight', dim=0)[源代码]¶
将权重归一化应用于给定模块中的参数。
权重归一化是一种重新参数化方法,它将权重张量的幅度与其方向解耦。这将由
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。如果您对此感到困扰,请在 https://github.com/pytorch/pytorch/issues/102999 上发表评论。要删除权重归一化重新参数化,请使用
torch.nn.utils.parametrize.remove_parametrizations()。权重不再在模块前向传播时一次重新计算;而是,它将在每次访问时重新计算。要恢复旧的行为,请在调用相关模块之前使用
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])