Pytorch初始化方法

常用初始化方法

PyTorch 中提供了 10 中初始化方法

  1. Xavier 均匀分布
  2. Xavier 正态分布
  3. Kaiming 均匀分布
  4. Kaiming 正态分布
  5. 均匀分布
  6. 正态分布
  7. 常数分布
  8. 正交矩阵初始化
  9. 单位矩阵初始化
  10. 稀疏矩阵初始化

3、nn.init.kaiming_normal_(m.weight.data)

5、用均匀分布的值填充输入张量, 参数a:均匀分布的下界, 默认为0.; 参数b:均匀分布的上界, 默认为1
uniform_weights = nn.init.uniform_(weights, a=0., b=1.)

6、用正太分布的值填充输入张量, 参数mean:正态分布的均值, 默认为0.; 参数std:正态分布的方差, 默认为1.

normal_weights = nn.init.normal_(weights, mean=0., std=1.)

7、用常数值填充输入张量, 参数val:要填充的常数.
constant_weights = nn.init.constant_(weights, val=2)

用常数1.填充输入张量
ones_weights = nn.init.ones_(weights)

用常数0.填充输入张量
zeros_weights = nn.init.zeros_(weights)

网络层的参数初始化方法

1. 在__init__()方法中遍历self.modules()来获取模型中的每一层,然后使用 isinstance()方法对特定层的weights和bias使用特定的初始化方法。对于使用relu激活的卷积层,通常用'kaiming'初始化卷积层参数;比如:

for m in self.modules():
    if isinstance(m, nn.Conv2d):
        nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')
    elif isinstance(m, nn.BatchNorm2d):
        nn.init.constant_(m.weight, 1)
        nn.init.constant_(m.bias, 0)


2. 或者先写好初始化函数,然后使用apply()方法进行模型初始化:

def weights_init(m): 
    if isinstance(m, nn.Conv2d): 
        nn.init.xavier_normal_(m.weight.data) 
        nn.init.xavier_normal_(m.bias.data)
    elif isinstance(m, nn.BatchNorm2d):
        nn.init.constant_(m.weight,1)
        nn.init.constant_(m.bias, 0)
 
model.apply(weights_init)
 

你可能感兴趣的:(pytorch,人工智能,python)