深度学习第一磅——权重初始化

小编很久都没有更博啦,今天在做C3framework的时候碰到了一些问题,关于权重的,学的稀里糊涂滴,所以小编今天花费半天的时间总结了深度学习所有初始化的知识点快快收藏起来叭!
如果觉得有帮助记得关注,点赞,欢迎评论区各位大佬评论哟~
话不多说,上干货啦~

权重初始化

背景(前期准备工作)

模型定义三要素:1.必须继承nn.Moudle这个类;

​ 2.在__init__ __(self)中设置好需要的组件(例如:conv,pooling,linear,batchnorm等)

​ 3.最后在forward中对定义好的组件进行搭积木

*权重初始化注意点:*1】先设定什么层用什么初始化方法,初始化方法在torch.nn,init中给出;{重点!!!!}

​ 2】实例化一个模型后,执行该函数,即可完成初始化;

初始化架构【大饼一张】:

def initialize_weight(self):
    for m in self.moudles():  #self.moudles是系统里自带的函数{m的表示:依此返回各层}
        if isinstance(m,nn.Conv2d):#若该层是卷积层,则采用xavier方法
            torch.nn.init.xavier_normal(m.weight.data) 
            if m.bias is not None:  #判断是否存在偏置
                m.bias.data.zero_()  #若存在偏置将偏置初始化为零
        elif isinstance(m,nn.BatchNorm2d):#若该层是批归一化层,则......
            m.weight.data.fill_(1)   
            m.bias.data.zero_()
        elif isinstance(m,nn.Linear):#若......
            torch.nn.init.normal(m.weight.data,0,0.01)
            m.bias.data.zero_()

权值初始化10个方法:【具体方法】

1)Xavier 初始化方法

该方法初始化的分布分为正态分布与均匀分布两个;

1> Xavier 均匀分布

表达形式:torch.nn.init.xavier_unifrom_(tensor,gain =1)

或者 torch.nn.init.xavier_unifrom_(w,gain=nn.init.calculate_gain(“relu”)) #由激活函数的类型决定

服从均匀分布U(-a,a),分布的参数为:a=gain*sqrt(6/fan_in+fan_out)

2>Xavier 正态分布

表达形式:torch.nn.init.xaier_normal_(tensor,gain=1)

或者 torch.nn.init.xavier_normal_(w,gain=nn.init.calculate_gain(“relu”)) #由激活函数的类型决定gain

2)kaming 初始化方法

1> kaming 均匀分布

表达形式:torch.nn.init.kaming_unifrom_(tensor,a=0,mode=“fan_in”,nonlinearity=‘leaky Relu’)

a: 激活函数在负半轴的斜率;

mode:可选择fan_in/fan_out【fan_in:正向传输过程中方差一致;fan_out:反向传输过程中方差一致】

nonlinearity: 默认LRelu 【可选:Relu和LRelu】

2> kaming 正态分布

表达式:torch.nn.init.kaming_normal_(tensor,mode=’’,nonlinearity=’’)

a:激活函数负半轴的斜率

3)均匀分布初始化

表达形式:torch.nn.init.unifrom_(tensor,a,b=1)

使值服从(a,b)上的均匀分布

4)正态分布初始化

表达形式:torch.nn.init.normal_(tensor,mean=0,std=1)

使值服从正态分布,N(mean,std),默认值为0,1.

5)常数初始化

表达式:torch.nn.init.constant_(tensor,val)

使值为val

6)单位矩阵初始化

表达式:torch.nn.init.eye_(tensor)

将二维tensor转化为单位矩阵

7)正交初始化

表达式:torch.nn.init.orthogonal_(tensor,gain=1)

使得tensor正交

8)稀疏初始化

表达式:torch.nn.init.sparse_(tensor,sparsity,std=0.01)

sparsity: 设置每一列的稀疏比例,即为0的比例;

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值