为什么要进行权值初始化

深度神经网络经常会遇到梯度消失或者梯度爆炸现象。为什么会出现这种现象呢?熟悉链式求导法则的大家都知道,梯度是一些量的连乘,这些当中最重要的就是模型的输出。如果这时,模型的输出过大或者过小,将会导致梯度过大或过小(神经元死亡)。而控制模型输出的大小,跟模型的输入和模型的参数有关。所以从这个角度来看,我们是希望模型的输出是比较稳定的(也就是输出的方差比较稳定)。当然,也有其他方面的原因。比如说,如果模型的参数初始化刚好在模型最优解的附近,那么模型的优化将变得十分简单。

权值初始化的例子

def initialize_weights(self):for m in self.modules:# 对卷积层进行初始化if isinstance(m, nn.Conv2d):torch.nn.init.xavier_normal_(m.weight.data)if m.bias is not None:m.bias.data.zero_()# 对BN层进行初始化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_()

从self.modules中遍历每一层,判断各层属于什么类型,如 是否是 nn.Conv2d、nn.BatchNorm2d、nn.Linear 等,然后根据不同类型的层,设定不同的权值初始化方法,例如,Xavier,kaiming,normal_,uniform_等。

常用的初始化方法

Xavier 均匀分布

torch.nn.init.xavier_uniform_(tensor: torch.Tensor, gain: float = 1.0) → torch.Tensor

参数:tensor:一个n维的tensor
gain:缩放因子

Xavier 正态分布

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

W~N(0,std)

kaiming 均匀分布

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

mode:可选fan_in或fan_out,fan_in正向传播时方差一致,fan_out反向传播时方差一致
nonlinearity:可选relu或leaky_relu,默认为leaky_relu
W~U(-bound,bound),其中bound的计算公式:

kaiming 正态分布

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

正态分布~(0,std)

均匀分布初始化

torch.nn.init.uniform_(tensor, a=0.0, b=1.0)

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

正态分布初始化

torch.nn.init.normal_(tensor, mean=0.0, std=1.0)

常数初始化

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

0初始化

torch.nn.init.zeros_(tensor)

单位矩阵初始化

torch.nn.init.eye_(tensor)

正交初始化

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

权值初始化的常用方法相关推荐

  1. caffe中权值初始化方法

    参考:https://www.cnblogs.com/tianshifu/p/6165809.html 首先说明:在caffe/include/caffe中的 filer.hpp文件中有它的源文件,如 ...

  2. 3.6 权值初始化-机器学习笔记-斯坦福吴恩达教授

    权值初始化 0值初始化 在逻辑回归中,我们通常会初始化所有权值为 0 ,假如在如下的神经网络也采用 0 值初始化: 则可以得到: a1(1)=a2(2)a^{(1)}_1=a^{(2)}_2a1(1) ...

  3. PyTorch框架学习十一——网络层权值初始化

    PyTorch框架学习十一--网络层权值初始化 一.均匀分布初始化 二.正态分布初始化 三.常数初始化 四.Xavier 均匀分布初始化 五.Xavier正态分布初始化 六.kaiming均匀分布初始 ...

  4. Pytorch —— 权值初始化

    1.梯度消失与爆炸 这里使用一个三层的全连接网络,现在观察一下第二个隐藏层W2W_2W2​的权值的梯度是怎么求取的. 根据链式求导法则可以知道,W2W_2W2​的求导如下: H2=H1∗W2\math ...

  5. Lecture6:激活函数、权值初始化、数据预处理、批量归一化、超参数选择

    目录 1.最小梯度下降(Mini-batch SGD) 2.激活函数 2.1 sigmoid 2.2 tanh 2.3 ReLU 2.4 Leaky ReLU 2.5 ELU 2.6 最大输出神经元 ...

  6. Tensorflow:BP神经网络权值初始化

    一.Tensorflow入门 1.计算图: 每一个计算都是计算图上的一个结点,而节点之间的边描述了计算之间的依赖关系. 支持通过tf.Graph生成新的计算图,不同计算图上的张量和运算不会共享. Te ...

  7. 深度学习--权值初始化

    什么是权值初始化 在神经网络的前向传播的过程中,需要设置输入到输出的权重. 为什么要权值初始化 正确的权值初始化可以促进模型的快速收敛,不正确的权值初始化可能使得模型在前向传播是发生发生信息消失,或在 ...

  8. 卷积核权值初始化_Pytorch卷积层手动初始化权值的实例

    由于研究关系需要自己手动给卷积层初始化权值,但是好像博客上提到的相关文章比较少(大部分都只提到使用nn.init里的按照一定分布初始化方法),自己参考了下Pytorch的官方文档,发现有两种方法吧. ...

  9. 权值初始化 - Xavier和MSRA方法

    设计好神经网络结构以及loss function 后,训练神经网络的步骤如下: 初始化权值参数 选择一个合适的梯度下降算法(例如:Adam,RMSprop等) 重复下面的迭代过程: 输入的正向传播 计 ...

最新文章

  1. ReactOS 0.4.11 发布,Windows 系统的开源替代方案
  2. 如何有效利用SD-WAN改善网络性能?
  3. MainService流程
  4. 55种网页常用小技巧(转载)
  5. c语言sleep函数上限多久解除,关于sleep函数的问题,
  6. 接口规范 10. 并发限制相关接口
  7. Openstack概论
  8. 任正非就注册姚安娜商标道歉;人人影视字幕组因盗版被查;JIRA、Confluence 等产品本月停售本地化版本 | 极客头条...
  9. iOS Android 上传代码库+持续集成+单元测试
  10. jmeter压力测试+badboy脚本录制
  11. matlab设置柱状图空白,MATLAB画柱状图时形状填充及颜色改变问题
  12. python怎样分析文献综述_怎么写文献综述?
  13. 急需你的意见:句子迷图文日签投票
  14. 中图杯获奖作品计算机组,中图杯大赛试卷
  15. PLSQL Developer 13.0.0.1883 注册码
  16. 【数据处理】PS动作功能(附:下雨效果)
  17. python:ocr图文识别(百度智能云API文字识别)
  18. returned a response status of 405 Method Not Allowed
  19. 程序员养娃记:撸一手好代码,却带不好一个娃?!
  20. 微服务架构和面向服务架构的区别

热门文章

  1. PACS HIS DICOM以及相关
  2. 实践练习1:OceanBase Docker 体验
  3. Can''t find the channel handler for deviceType 工行 个人网银 错误
  4. 亚马逊新手卖家选品究竟要坚持什么样的原则?
  5. 5.23 人工智能 ——江湖上传说再起
  6. 设计模式—1-工厂模式
  7. 【菜鸟级】H5多人网络在线格斗游戏简单Demo
  8. 基于LSTM递归神经网络的多特征电能负荷预测(Python代码实现)
  9. 教程视频如何压制体积更小
  10. java中的方法参数