# torch.nn.init

torch.nn.init.calculate_gain(nonlinearity, param=None)


Linear / Identity $1$
Conv{1,2,3}D $1$
Sigmoid $1$
Tanh $\frac{5}{3}$
ReLU $\sqrt{2}$
Leaky Relu $\sqrt{\frac{2}{1 + \text{negative\_slope}^2}}$

• nonlinearity – 非线性函数 (nn.functional 中的名字)
• param – 对应非线性函数的可选参数

>>> gain = nn.init.calculate_gain('leaky_relu')


torch.nn.init.uniform_(tensor, a=0, b=1)


• tensor – n 维 torch.Tensor
• a – 均匀分布的下界
• b – 均匀分布的上界

>>> w = torch.empty(3, 5)
>>> nn.init.uniform_(w)


torch.nn.init.normal_(tensor, mean=0, std=1)


• tensor – n 维 torch.Tensor
• mean – 正态分布的均值
• std – 正态分布的标准差

>>> w = torch.empty(3, 5)
>>> nn.init.normal_(w)


torch.nn.init.constant_(tensor, val)


• tensor – n 维 torch.Tensor
• val – 用以填入张量的常数

>>> w = torch.empty(3, 5)
>>> nn.init.constant_(w, 0.3)


torch.nn.init.eye_(tensor)


• tensor – 2 维 torch.Tensor

>>> w = torch.empty(3, 5)
>>> nn.init.eye_(w)


torch.nn.init.dirac_(tensor)


• tensor – {3, 4, 5} 维 torch.Tensor

>>> w = torch.empty(3, 16, 5, 5)
>>> nn.init.dirac_(w)


torch.nn.init.xavier_uniform_(tensor, gain=1)


$a = \text{gain} \times \sqrt{\frac{6}{\text{fan\_in} + \text{fan\_out}}}$

• tensor – n 维 torch.Tensor
• gain – 可选缩放因子

>>> w = torch.empty(3, 5)
>>> nn.init.xavier_uniform_(w, gain=nn.init.calculate_gain('relu'))


torch.nn.init.xavier_normal_(tensor, gain=1)


$\text{std} = \text{gain} \times \sqrt{\frac{2}{\text{fan\_in} + \text{fan\_out}}}$

• tensor – n 维 torch.Tensor
• gain – 可选缩放因子

>>> w = torch.empty(3, 5)
>>> nn.init.xavier_normal_(w)


torch.nn.init.kaiming_uniform_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')


$\text{bound} = \sqrt{\frac{6}{(1 + a^2) \times \text{fan\_in}}}$

• tensor – n 维 torch.Tensor
• a – 该层后面一层的整流函数中负的斜率 (默认为 0，此时为 Relu)
• mode – ‘fan_in’ (default) 或者 ‘fan_out’。使用fan_in保持weights的方差在前向传播中不变；使用fan_out保持weights的方差在反向传播中不变。
• nonlinearity – 非线性函数 (nn.functional 中的名字)，推荐只使用 ‘relu’ 或 ‘leaky_relu’ (default)。

>>> w = torch.empty(3, 5)
>>> nn.init.kaiming_uniform_(w, mode='fan_in', nonlinearity='relu')


torch.nn.init.kaiming_normal_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')


$\text{std} = \sqrt{\frac{2}{(1 + a^2) \times \text{fan\_in}}}$

• tensor – n 维 torch.Tensor
• a – 该层后面一层的整流函数中负的斜率 (默认为 0，此时为 Relu)
• mode – ‘fan_in’ (default) 或者 ‘fan_out’。使用fan_in保持weights的方差在前向传播中不变；使用fan_out保持weights的方差在反向传播中不变。
• nonlinearity – 非线性函数 (nn.functional 中的名字)，推荐只使用 ‘relu’ 或 ‘leaky_relu’ (default)。

>>> w = torch.empty(3, 5)
>>> nn.init.kaiming_normal_(w, mode='fan_out', nonlinearity='relu')


torch.nn.init.orthogonal_(tensor, gain=1)


>>> w = torch.empty(3, 5)
>>> nn.init.orthogonal_(w)


torch.nn.init.sparse_(tensor, sparsity, std=0.01)


• tensor – n 维 torch.Tensor
• sparsity – 每一行置零元素的比例
• std – 初始化非零元素时使用正态分布的标准差

>>> w = torch.empty(3, 5)
>>> nn.init.sparse_(w, sparsity=0.1)



• #### scikit-learn (sklearn) 官方文档中文版

ApacheCN python 65页 2019年5月26日
2022

• #### Python方向综合面试题

jackfrued python 115页 2019年5月26日
35

2716

• #### aiohttp 中文文档

HuberTRoy python 124页 2018年7月8日
34

• #### Go语言高级编程

chai2010 go 49页 2018年6月8日
2423

• #### Openstack用户指南（简体中文版）

tzivanmoe spark 47页 2018年7月1日
0