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的方法来初始化