PyTorch 学习笔记(四):权值初始化的十种方法

加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动!

同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流点击文末“阅读原文”立刻申请入群~

作者 | 余霆嵩

来源专栏 | PyTorch学习笔记

本文截取自一个github上千星的火爆教程——《PyTorch 模型训练实用教程》,教程内容主要为在 PyTorch 中训练一个模型所可能涉及到的方法及函数的详解等,本文为作者整理的学习笔记(四),pytorch在torch.nn.init中提供了常用的初始化方法函数,这里简单介绍,方便查询使用。后续会继续更新这个系列,欢迎关注。

项目代码:https://github.com/tensor-yu/PyTorch_Tutorial

系列回顾:

pytorch在torch.nn.init中提供了常用的初始化方法函数,这里简单介绍,方便查询使用。

介绍分两部分:

1. Xavier,kaiming系列;

2. 其他方法分布

Xavier初始化方法,论文在《Understanding the difficulty of training deep feedforward neural networks》

公式推导是从“方差一致性”出发,初始化的分布有均匀分布和正态分布两种。

 Xavier,kaiming系列

1. Xavier均匀分布

torch.nn.init.xavier_uniform_(tensor, gain=1)

xavier初始化方法中服从均匀分布U(−a,a) ,分布的参数a = gain * sqrt(6/fan_in+fan_out),

这里有一个gain,增益的大小是依据激活函数类型来设定

eg:nn.init.xavier_uniform_(w, gain=nn.init.calculate_gain('relu'))

PS:上述初始化方法,也称为Glorot initialization

2. Xavier正态分布

torch.nn.init.xavier_normal_(tensor, gain=1)

xavier初始化方法中服从正态分布,

mean=0,std = gain * sqrt(2/fan_in + fan_out)

kaiming初始化方法,论文在《 Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification》,公式推导同样从“方差一致性”出法,kaiming是针对xavier初始化方法在relu这一类激活函数表现不佳而提出的改进,详细可以参看论文。

3. kaiming均匀分布

torch.nn.init.kaiming_uniform_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')

此为均匀分布,U~(-bound, bound), bound = sqrt(6/(1+a^2)*fan_in)

其中,a为激活函数的负半轴的斜率,relu是0

mode- 可选为fan_in 或 fan_out, fan_in使正向传播时,方差一致; fan_out使反向传播时,方差一致

nonlinearity- 可选 relu 和 leaky_relu ,默认值为 。 leaky_relu

nn.init.kaiming_uniform_(w, mode='fan_in', nonlinearity='relu')

4. kaiming正态分布

torch.nn.init.kaiming_normal_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')

此为0均值的正态分布,N~ (0,std),其中std = sqrt(2/(1+a^2)*fan_in)

其中,a为激活函数的负半轴的斜率,relu是0

mode- 可选为fan_in 或 fan_out, fan_in使正向传播时,方差一致;fan_out使反向传播时,方差一致

nonlinearity- 可选 relu 和 leaky_relu ,默认值为 。 leaky_relu

nn.init.kaiming_normal_(w, mode='fan_out', nonlinearity='relu')

其他方法分布

5. 均匀分布初始化

torch.nn.init.uniform_(tensor, a=0, b=1)

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

6. 正态分布初始化

torch.nn.init.normal_(tensor, mean=0, std=1)

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

7. 常数初始化

torch.nn.init.constant_(tensor, val)

使值为常数val nn.init.constant_(w, 0.3)

8. 单位矩阵初始化

torch.nn.init.eye_(tensor)

将二维tensor初始化为单位矩阵(the identity matrix)

9. 正交初始化

torch.nn.init.orthogonal_(tensor, gain=1)

使得tensor是正交的,论文:Exact solutions to the nonlinear dynamics of learning in deep linear neural networks” - Saxe, A. et al. (2013)

10. 稀疏初始化

torch.nn.init.sparse_(tensor, sparsity, std=0.01)

从正态分布N~(0. std)中进行稀疏化,使每一个column有一部分为0

sparsity- 每一个column稀疏的比例,即为0的比例

nn.init.sparse_(w, sparsity=0.1)

11. 计算增益

torch.nn.init.calculate_gain(nonlinearity, param=None)

(0)

相关推荐

  • 深度学习在图像分类中的应用ーー利用 Pytorch 从零开始创建 CNN

    重磅干货,第一时间送达 推荐阅读 31个Python实战项目教你掌握图像处理,PDF开放下载 opencv_contrib扩展模块中文教程pdf,限时领取 引言 本文将解释一个卷积神经网络(CNN)的 ...

  • 【pytorch速成】Pytorch图像分类从模型自定义到测试

    言有三 毕业于中国科学院,计算机视觉方向从业者,有三工作室等创始人 作者 | 言有三(微信号Longlongtogo) 编辑 | 言有三 前面已跟大家介绍了Caffe和TensorFlow,链接如下. ...

  • Pytorch量化入门之超分量化(二)

    来源:AIWalker 最近Happy在尝试进行图像超分的INT8量化,发现:pytorch量化里面的坑真多,远不如TensorFlow的量化好用.不过花了点时间终于还是用pytorch把图像超分模型 ...

  • 「PyTorch自然语言处理系列」3. 神经网络的基本组件(上)

    数据与智能 226篇原创内容 公众号 来源 |  Natural Language Processing with PyTorch 作者 | Rao,McMahan 译者 | Liangchu 校对 ...

  • Pytorch - TORCH.NN.INIT 参数初始化的操作

    这篇文章主要介绍了Pytorch - TORCH.NN.INIT 参数初始化的操作,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧路径:https://pytorch.org/docs ...

  • 深度学习之PyTorch实战(3)

    上一节,我们已经学会了基于PyTorch深度学习框架高效,快捷的搭建一个神经网络,并对模型进行训练和对参数进行优化的方法,接下来让我们牛刀小试,基于PyTorch框架使用神经网络来解决一个关于手写数字 ...

  • 小白学PyTorch | 4 构建模型三要素与权重初始化

    文章目录: 1 模型三要素 2 参数初始化 3 完整运行代码 4 尺寸计算与参数计算 这篇文章内容不多,比较基础,里面的代码块可以复制到本地进行实践,以加深理解. 喜欢的话,可以给公众号加一个星标,点 ...

  • 《中医基础理论》学习笔记(四)

    阴阳学说 阴阳学说是在气一元论的基础上建立起来的中国古代的朴素的对立统一理论,属于中国古代唯物论和辩证法范畴,体现出中华民族辩证思维的特殊精神. 阴阳学说认为:世界是物质性的整体,宇宙间一切事物不仅其 ...

  • 学习笔记四

    蒋介石逃离大陆带走两样东西,泥土和<论持久战>,一个黄埔军校的校长都写不出这样的书.毛主席能把坏事变好事,共产党通过抗日人越来越多. 你越不在乎,反而越在乎你. 自以为是的人也敬畏副班. ...

  • flask学习笔记(四):利用render

    基础 render_template()有什么用 在Python代码中 直接生成 HTML 缺点很多,比如笨拙,效率低,可读性差.因此, Flask 提供了 Jinja2 模板引擎来帮助开发者高效灵活 ...

  • 没有OPC油路的上汽调节型阀门油动机油路什么样(学习笔记四)

    EH油系统学习推荐: EH油系统为什么设有压回油?有什么用?怎么形成压力?? 为什么EH油泵大多都用柱塞泵? 机组打闸后,EH油流量是变大还是变小?EH油压下降较多怎么办? 上汽600MW超临界机组D ...

  • 为什么发电机内没有压力,氢侧油箱无法自动排油?(启动学习笔记四))

    前几日学习双环流密封油系统大概的工作流程及各设备的作用,因水平有限,整理的有些乱,笔记如下: 密封油系统启动时,油从哪来?(学习笔记一) 密封油四路备用油源,油从哪来?(学习笔记二) 密封油氢侧油循环 ...

  • PyTorch 学习笔记(七):PyTorch的十个优化器

    加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动! 同时提供每月大咖直播分享.真实项目需求对接.干货资讯汇总 ...

  • PyTorch 学习笔记(六):PyTorch的十七个损失函数

    加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动! 同时提供每月大咖直播分享.真实项目需求对接.干货资讯汇总 ...

  • PyTorch 学习笔记(五):Finetune和各层定制学习率

    加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动! 同时提供每月大咖直播分享.真实项目需求对接.干货资讯汇总 ...

  • PyTorch 学习笔记(三):transforms的二十二个方法

    加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动! 同时提供每月大咖直播分享.真实项目需求对接.干货资讯汇总 ...