【深度学习实战(12)】搭建训练框架之模型参数初始化

在深度学习模型的训练中,权重的初始值极为重要。一个好的初始值,会使模型收敛速度提高,使模型准确率更精确。一般情况下,我们不使用全0初始值训练网络。为了利于训练和减少收敛时间,我们需要对模型进行合理的初始化。

一、初始化方式

在常见的CNN深度学习模型中,最常出现的是Conv卷积BatchNorm算子
(1)对于Conv卷积,权重初始化的方式有‘normal’‘xavier’,‘kaiming’,‘orthogonal’

  • ‘normal’方式为例:对Conv卷积的weight通常是以均值为0,标准差为0.02的正态分布进行参数初始化

(2)对于BatchNorm算子,通常是使用‘normal’方式进行初始化

  • weight通常是以均值为1,标准差为0.02的正态分布进行参数初始化
  • bias通常是以方差为0的正态分布进行参数初始化

二、代码

def weights_init(net, init_type='normal', init_gain = 0.02):
    def init_func(m):
        classname = m.__class__.__name__
        if hasattr(m, 'weight') and classname.find('Conv') != -1:
            if init_type == 'normal':
                # ---------------------------------------------#
                #   Conv weight:均值为0,标准差为0.02的正态分布
                # ---------------------------------------------#
                torch.nn.init.normal_(m.weight.data, 0.0, init_gain)
            elif init_type == 'xavier':
                torch.nn.init.xavier_normal_(m.weight.data, gain=init_gain)
            elif init_type == 'kaiming':
                torch.nn.init.kaiming_normal_(m.weight.data, a=0, mode='fan_in')
            elif init_type == 'orthogonal':
                torch.nn.init.orthogonal_(m.weight.data, gain=init_gain)
            else:
                raise NotImplementedError('initialization method [%s] is not implemented' % init_type)
        elif classname.find('BatchNorm2d') != -1:
            # ---------------------------#
            #   BN weight:均值为1,标准差为0.02的正态分布
            # ---------------------------#
            torch.nn.init.normal_(m.weight.data, 1.0, 0.02)
            # ---------------------------#
            #   BN bias:方差为0的正态分布
            # ---------------------------#
            torch.nn.init.constant_(m.bias.data, 0.0)
    print('initialize network with %s type' % init_type)
    net.apply(init_func)

debug查看
在执行weights_init函数之前,model.Dethead.obj_preds.weight的数值为
在这里插入图片描述
在执行weights_init函数之后,model.Dethead.obj_preds.weight的数值为
在这里插入图片描述

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BILLY BILLY

你的奖励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值