『PyTorch』权值初始化

1. 梯度消失与梯度爆炸

  • 就是梯度趋于零或者无穷,梯度消失更容易出现

2. PyTorch提供的一些权值和偏置初始化方法

2.1 Xavier均匀分布

  • 不适用ReLU,适用于饱和函数,如sigmoid,tanh
nn.xavier_uniform_(tensor, gain=1.)

2.2 Xavier正态分布

  • 不适用ReLU,适用于饱和函数,如sigmoid,tanh
nn.xavier_normal_(tensor, gain=1.)

2.3. Kaiming均匀分布

  • 适用于ReLu
nn.kaiming_uniform_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')

2.4 Kaiming正态分布

  • 适用于ReLu
nn.kaiming_normal_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')

2.5 均匀分布

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

2.6 正态分布

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

2.7 常数分布

nn.constant_(tensor, val)
nn.ones_(tensor)
nn.zeros_(tensor)

2.8 正交矩阵初始化

nn.orthogonal_(tensor, gain=1)

2.9 单位矩阵初始化

nn.eye_(tensor)

2.10 稀疏矩阵初始化

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

3. 使用方法

在网络类内部定义initialize_weights(self)方法

nn.init.方法名(self.weight.data)
nn.init.方法名(self.bias.data)

或者,由于这些data都是Tensor,也可以使用Tensor的方法来初始化

你可能感兴趣的:(PyTorch)