栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

神经网络参数初始化

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

神经网络参数初始化

1. bn层的参数初始化

bn层需要初始化的参数主要是scale和bias,bias一般初始化为0,scale有两种初始化方式

  • 初始化为1
  • 初始化为0:这里假定bn层不存在,一般用在有残差的结构:resblock,因为有chortcut,所以这种初始化方式才可行
# Zero-initialize the last BN in each residual branch,
# so that the residual branch starts with zeros, and each residual block behaves like an identity.
# This improves the model by 0.2~0.3% according to https://arxiv.org/abs/1706.02677
if zero_init_residual:
    for m in self.modules():
        if isinstance(m, Bottleneck):
            nn.init.constant_(m.bn3.weight, 0)
        elif isinstance(m, BasicBlock):
            nn.init.constant_(m.bn2.weight, 0)
2. fc层的参数初始化
  • weight:正态分布来初始化,均值为0,方差可以调整
  • bias:0.01或者为0,一般为0
if isinstance(m, nn.Linear):
    nn.init.normal_(m.weight, 0, 0.01)  #均值为0, 方差为0.01
    nn.init.zeros_(m.bias)
3. conv层的参数初始化
  • bias:0.01或者为0,一般为0
  • weight:

(1)Xavier 初始化:Xavier 参数初始化、深度学习参数初始化(一)Xavier初始化 含代码

(2)He初始化:深度学习参数初始化(二)Kaiming初始化 含代码

在He初始化中可以选择mode为:fan_in或者fan_out,有博主总结:

  • 如果权重是通过线性层(卷积或全连接)隐性确定的,则需设置mode=fan_in;
  • 如果通过创建随机矩阵显式创建权重,则应进行设置mode=‘fan_out’。

我看了下各大主流的模型如mobilenet_v2,resnet都采用的是mode=‘fan_out’

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1026535.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号