weight_norm

paddle.nn.utils. weight_norm ( layer, name='weight', dim=0 ) [源代码]

该接口根据以下公式对传入的 layer 中的权重参数进行归一化:

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

权重归一化可以将神经网络中权重向量的长度与其方向解耦,权重归一化可以用两个变量(例如: 代表长度的变量 weight_g 和代表方向的变量 weight_v)来代替由名字(例如: weight)指定的变量。详细可以参考论文: A Simple Reparameterization to Accelerate Training of Deep Neural Networks

参数:
  • layer (paddle.nn.Layer) - 要添加权重归一化的层。

  • name (str, 可选) - 权重参数的名字。默认:'weight'.

  • dim (int|None, 可选) - 进行归一化操作的切片所在维度,是小于权重Tensor rank的非负数。比如卷积的权重shape是 [cout,cin,kh,kw] , rank是4,则dim可以选0,1,2,3;fc的权重shape是 [cout,cin] ,rank是2,dim可以选0,1。 如果为None就对所有维度上的元素做归一化。默认:0。

返回:

Layer , 添加了权重归一化hook的层

代码示例

import numpy as np
import paddle
from paddle.nn import Conv2D
from paddle.nn.utils import weight_norm
x = np.array([[[[0.3, 0.4], [0.3, 0.07]], [[0.83, 0.37], [0.18, 0.93]]]]).astype('float32')
conv = Conv2D(3, 5, 3)
wn = weight_norm(conv)
print(conv.weight_g.shape)
# [5]
print(conv.weight_v.shape)
# [5, 3, 3, 3]