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)
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值