oneflow.nn.utils.weight_norm(module: T_module, name: str = 'weight', dim: int = 0)T_module

Applies weight normalization to a parameter in the given module.

\[\mathbf{w}=g \frac{\mathbf{v}}{\|\mathbf{v}\|}\]

Weight normalization is a reparameterization that decouples the magnitude of a weight tensor from its direction. This replaces the parameter specified by name (e.g. 'weight') with two parameters: one specifying the magnitude (e.g. 'weight_g') and one specifying the direction (e.g. 'weight_v'). Weight normalization is implemented via a hook that recomputes the weight tensor from the magnitude and direction before every forward() call.

By default, with dim=0, the norm is computed independently per output channel/plane. To compute a norm over the entire weight tensor, use dim=None.


This document description is refereced to the Pytorch document:

  • module (Module) – containing module

  • name (str, optional) – name of weight parameter

  • dim (int, optional) – dimension over which to compute the norm


The original module with the weight norm hook

For example:

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