XavierNormal

class paddle.nn.initializer. XavierNormal ( fan_in=None, fan_out=None, gain=1.0, name=None ) [源代码]

使用正态分布的泽维尔权重初始化方法。泽维尔权重初始化方法出自泽维尔·格洛特和约书亚·本吉奥的论文 Understanding the difficulty of training deep feedforward neural networks

该初始化函数用于保持所有层的梯度尺度几乎一致。所使用的正态分布的的均值为 \(0\),标准差为

\[x = gain \times \sqrt{\frac{2.0}{fan\_in+fan\_out}}.\]

参数

  • fan_in (float,可选) - 用于泽维尔初始化的 fan_in,从 Tensor 中推断,默认值为 None。

  • fan_out (float,可选) - 用于泽维尔初始化的 fan_out,从 Tensor 中推断,默认值为 None。

  • gain (float,可选) - 缩放因子。默认值为 1.0。

  • name (str,可选) - 具体用法请参见 Name,一般无需设置,默认值为 None。

返回

由使用正态分布的泽维尔权重初始化的参数。

代码示例

>>> import paddle
>>> paddle.seed(1)
>>> data = paddle.ones(shape=[3, 1, 2], dtype='float32')
>>> weight_attr = paddle.framework.ParamAttr(
...     name="linear_weight",
...     initializer=paddle.nn.initializer.XavierNormal())
>>> bias_attr = paddle.framework.ParamAttr(
...     name="linear_bias",
...     initializer=paddle.nn.initializer.XavierNormal())
>>> linear = paddle.nn.Linear(2, 2, weight_attr=weight_attr, bias_attr=bias_attr)
>>> print(linear.weight)
Parameter containing:
Tensor(shape=[2, 2], dtype=float32, place=Place(cpu), stop_gradient=False,
[[-0.21607460,  0.08382989],
 [ 0.29147008, -0.07049121]])

>>> print(linear.bias)
Parameter containing:
Tensor(shape=[2], dtype=float32, place=Place(cpu), stop_gradient=False,
[1.06076419, 0.87684733])

>>> res = linear(data)
>>> print(res)
Tensor(shape=[3, 1, 2], dtype=float32, place=Place(cpu), stop_gradient=False,
[[[1.13615966, 0.89018601]],
 [[1.13615966, 0.89018601]],
 [[1.13615966, 0.89018601]]])

使用本API的教程文档