权值初始化的常用方法
为什么要进行权值初始化
深度神经网络经常会遇到梯度消失或者梯度爆炸现象。为什么会出现这种现象呢?熟悉链式求导法则的大家都知道,梯度是一些量的连乘,这些当中最重要的就是模型的输出。如果这时,模型的输出过大或者过小,将会导致梯度过大或过小(神经元死亡)。而控制模型输出的大小,跟模型的输入和模型的参数有关。所以从这个角度来看,我们是希望模型的输出是比较稳定的(也就是输出的方差比较稳定)。当然,也有其他方面的原因。比如说,如果模型的参数初始化刚好在模型最优解的附近,那么模型的优化将变得十分简单。
权值初始化的例子
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)
权值初始化的常用方法相关推荐
- caffe中权值初始化方法
参考:https://www.cnblogs.com/tianshifu/p/6165809.html 首先说明:在caffe/include/caffe中的 filer.hpp文件中有它的源文件,如 ...
- 3.6 权值初始化-机器学习笔记-斯坦福吴恩达教授
权值初始化 0值初始化 在逻辑回归中,我们通常会初始化所有权值为 0 ,假如在如下的神经网络也采用 0 值初始化: 则可以得到: a1(1)=a2(2)a^{(1)}_1=a^{(2)}_2a1(1) ...
- PyTorch框架学习十一——网络层权值初始化
PyTorch框架学习十一--网络层权值初始化 一.均匀分布初始化 二.正态分布初始化 三.常数初始化 四.Xavier 均匀分布初始化 五.Xavier正态分布初始化 六.kaiming均匀分布初始 ...
- Pytorch —— 权值初始化
1.梯度消失与爆炸 这里使用一个三层的全连接网络,现在观察一下第二个隐藏层W2W_2W2的权值的梯度是怎么求取的. 根据链式求导法则可以知道,W2W_2W2的求导如下: H2=H1∗W2\math ...
- Lecture6:激活函数、权值初始化、数据预处理、批量归一化、超参数选择
目录 1.最小梯度下降(Mini-batch SGD) 2.激活函数 2.1 sigmoid 2.2 tanh 2.3 ReLU 2.4 Leaky ReLU 2.5 ELU 2.6 最大输出神经元 ...
- Tensorflow:BP神经网络权值初始化
一.Tensorflow入门 1.计算图: 每一个计算都是计算图上的一个结点,而节点之间的边描述了计算之间的依赖关系. 支持通过tf.Graph生成新的计算图,不同计算图上的张量和运算不会共享. Te ...
- 深度学习--权值初始化
什么是权值初始化 在神经网络的前向传播的过程中,需要设置输入到输出的权重. 为什么要权值初始化 正确的权值初始化可以促进模型的快速收敛,不正确的权值初始化可能使得模型在前向传播是发生发生信息消失,或在 ...
- 卷积核权值初始化_Pytorch卷积层手动初始化权值的实例
由于研究关系需要自己手动给卷积层初始化权值,但是好像博客上提到的相关文章比较少(大部分都只提到使用nn.init里的按照一定分布初始化方法),自己参考了下Pytorch的官方文档,发现有两种方法吧. ...
- 权值初始化 - Xavier和MSRA方法
设计好神经网络结构以及loss function 后,训练神经网络的步骤如下: 初始化权值参数 选择一个合适的梯度下降算法(例如:Adam,RMSprop等) 重复下面的迭代过程: 输入的正向传播 计 ...
最新文章
- ReactOS 0.4.11 发布,Windows 系统的开源替代方案
- 如何有效利用SD-WAN改善网络性能?
- MainService流程
- 55种网页常用小技巧(转载)
- c语言sleep函数上限多久解除,关于sleep函数的问题,
- 接口规范 10. 并发限制相关接口
- Openstack概论
- 任正非就注册姚安娜商标道歉;人人影视字幕组因盗版被查;JIRA、Confluence 等产品本月停售本地化版本 | 极客头条...
- iOS Android 上传代码库+持续集成+单元测试
- jmeter压力测试+badboy脚本录制
- matlab设置柱状图空白,MATLAB画柱状图时形状填充及颜色改变问题
- python怎样分析文献综述_怎么写文献综述?
- 急需你的意见:句子迷图文日签投票
- 中图杯获奖作品计算机组,中图杯大赛试卷
- PLSQL Developer 13.0.0.1883 注册码
- 【数据处理】PS动作功能(附:下雨效果)
- python:ocr图文识别(百度智能云API文字识别)
- returned a response status of 405 Method Not Allowed
- 程序员养娃记:撸一手好代码,却带不好一个娃?!
- 微服务架构和面向服务架构的区别