Pytorch中的序列化容器-度消失和梯度爆炸-nn.Sequential-nn.BatchNorm1d-nn.Dropout

1. 梯度消失和梯度爆炸

在使用pytorch中的序列化 容器之前,我们先来了解一下常见的梯度消失和梯度爆炸的问题

1.1 梯度消失    【梯度太小,无法进行参数的更新,梯度小到数据类型无法表示时出现NAN】

假设我们有四层极简神经网络:每层只有一个神经元

获取w1的梯度有:▽w1 = x1f(a1)’w2f(b1)’w3*▽out

假设我们使用sigmoid激活函数,即f为sigmoid函数,sigmoid的导数如下图

假设每层都取得sigmoid导函数的最大值1/4,那么在反向传播时,X1=0.5,w1=w2=w3=0.5​

当权重初始过小或使用易饱和神经元(sigmoid,tanh,) sigmoid在y=0,1处梯度接近0,而无法更新参数,时神经网络在反向传播时也会呈现指数倍缩小,产生“消失”现象。

1.2 梯度爆炸    【梯度太大,大到数据类型无法表示,出现NAN】

假设X2=2,w1=w2=w3=2​

当权重初始过大时,梯度神经网络在反向传播时也会呈现指数倍放大,产生“爆炸”现象。

1.3 解决梯度消失或者梯度爆炸的经验   【1.使用更加容易计算梯度的激活函数 2.使用改进的优化算法 3.使用batch Normalization】

  1. 替换易训练神经元

  1. 改进梯度优化算法:使用adam等算法

  2. 使用batch normalization

2. nn.Sequential

nn.Sequential是一个有序的容器,其中传入的是构造器类(各种用来处理input的类),最终input会被Sequential中的构造器类依次执行

例如:

layer = nn.Sequential(nn.Linear(input_dim, n_hidden_1), nn.ReLU(True), #inplace=False 是否对输入进行就地修改,默认为Falsenn.Linear(n_hidden_1, n_hidden_2),nn.ReLU(True),nn.Linear(n_hidden_2, output_dim) # 最后一层不需要添加激活函数)

在上述过程中,可以直接调用layer(x),得到输出

x的被执行顺序就是Sequential中定义的顺序:

  1. 被隐层1执行,形状变为[batch_size,n_hidden_1]

  2. 被relu执行,形状不变

  3. 被隐层2执行,形状变为[batch_size,n_hidden_2]

  4. 被relu执行,形状不变

  5. 被最后一层执行,形状变为[batch_size,output_dim]

3. nn.BatchNorm1d  【加速模型的训练,把参数进行规范化的处理,让参数计算的梯度不会太小】

batch normalization 翻译成中文就是批规范化,即在每个batch训练的过程中,对参数进行归一化的处理,从而达到加快训练速度的效果。

以sigmoid激活函数为例,他在反向传播的过程中,在值为0,1的时候,梯度接近0,导致参数被更新的幅度很小,训练速度慢。但是如果对数据进行归一化之后,就会尽可能的把数据拉倒[0-1]的范围,从而让参数更新的幅度变大,提高训练的速度。

batchNorm一般会放到激活函数之后,即对输入进行激活处理之后再进入batchNorm

layer = nn.Sequential(nn.Linear(input_dim, n_hidden_1),nn.ReLU(True), nn.BatchNorm1d(n_hidden_1)nn.Linear(n_hidden_1, n_hidden_2),nn.ReLU(True),nn.BatchNorm1d(n_hidden_2)nn.Linear(n_hidden_2, output_dim) )

4. nn.Dropout

dropout在前面已经介绍过,可以理解为对参数的随机失活

  1. 增加模型的稳健性

  2. 可以解决过拟合的问题(增加模型的泛化能力)

  3. 可以理解为训练后的模型是多个模型的组合之后的结果,类似随机森林。

layer = nn.Sequential(nn.Linear(input_dim, n_hidden_1),nn.ReLU(True), nn.BatchNorm1d(n_hidden_1)nn.Dropout(0.3) #0.3 为dropout的比例,默认值为0.5nn.Linear(n_hidden_1, n_hidden_2),nn.ReLU(True),nn.BatchNorm1d(n_hidden_2)nn.Dropout(0.3)nn.Linear(n_hidden_2, output_dim) )

Pytorch中的序列化容器-度消失和梯度爆炸-nn.Sequential-nn.BatchNorm1d-nn.Dropout相关推荐

  1. 动手学深度学习(PyTorch实现)(四)--梯度消失与梯度爆炸

    梯度消失与梯度爆炸 1. 梯度消失与梯度爆炸 2. 模型参数的初始化 2.1 PyTorch的默认随机初始化 2.2 Xavier随机初始化 3. 环境因素 3.1 协变量偏移 3.2 标签偏移 3. ...

  2. 深度学习中梯度消失和梯度爆炸的根本原因及其缓解方法

    深度学习中梯度消失和梯度爆炸的根本原因及其缓解方法 一.梯度消失和爆炸的根本原因 1. 深层网络角度 2. 激活函数角度 二.梯度消失.爆炸的解决方案 1. 梯度剪切.正则 2. 采用其他的激活函数 ...

  3. 神经网络训练中的梯度消失和梯度爆炸问题

    梯度消失和梯度爆炸 梯度消失的具体表现是,接近于输出层的权值更新相对正常,但是接近于输入层的权值基本不更新,或更新的非常慢.这样,深度网络的学习就等价于只有后几层的浅层网络的学习了. 梯度爆炸的具体的 ...

  4. 深度学习中的梯度消失、梯度爆炸问题

    写在前面: 有些博主对这个问题的解释很好,这里参考了: 详解机器学习中的梯度消失.爆炸原因及其解决方法 我在这方面的工作经验和知识面还不够,还需要积累后再做出更为专业的解答. 参考我之前转发过的一篇文 ...

  5. 深度学习中的梯度消失与梯度爆炸及解决方案

    1.梯度消失与梯度爆炸 反向传播算法在神经网络中非常常见,可以说是整个深度学习的基石.在反向传播中,经常会出现梯度消失与梯度爆炸的问题.梯度消失产生的原因一般有两种情况:一是结构较深的网络,二是采用了 ...

  6. 动手学深度学习-过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶

    一.过拟合.欠拟合及其解决方案 前序知识点 模型选择 正则化:添加参数的惩罚项,防止过拟合.有L2正则化与L1正则化. 奥卡姆剃刀原则:有多个假设模型时,应该选择假设条件最少的. 模型的泛化能力:指模 ...

  7. PyTorch 笔记(16)— torch.nn.Sequential、torch.nn.Linear、torch.nn.RelU

    PyTorch 中的 torch.nn 包提供了很多与实现神经网络中的具体功能相关的类,这些类涵盖了深度神经网络模型在搭建和参数优化过程中的常用内容,比如神经网络中的卷积层.池化层.全连接层这类层次构 ...

  8. 梯度消失和梯度爆炸_知识干货-动手学深度学习-05 梯度消失和梯度爆炸以及Kaggle房价预测...

    梯度消失和梯度爆炸 考虑到环境因素的其他问题 Kaggle房价预测 梯度消失和梯度爆炸 深度模型有关数值稳定性的典型问题是消失(vanishing)和爆炸(explosion). 当神经网络的层数较多 ...

  9. 梯度消失和梯度爆炸_梯度消失梯度爆炸-Gradient Clip

    梯度爆炸与梯度消失 实际现象: 当我们使用sigmoid function作为激活函数时,随着神经网络的隐藏层数增加,训练误差反而增大,造成了深度网络的不稳定. 梯度弥散: 靠近输出层的hidden ...

最新文章

  1. 倒计时 8 天 | 完整议程大揭秘!来 20 个 AI 论坛,与百名大咖携手玩转人工智能...
  2. SPI 的主模式和从模式
  3. 基于Springboot实现在线考试管理系统
  4. 取input 输入_tensorRT动态输入(python)
  5. 英特尔® OpenVINO™中级认证正式开启!
  6. mysql——decimal类型与decimal长度
  7. django框架 day05
  8. 思科cisco路由器动态路由协议配置方法
  9. w ndows10怎么关闭启动项,win10怎么关闭开机启动项
  10. 2021-03-03
  11. String 常用方法总结
  12. rt-thread驱动篇(07)---STM32F429单片机SD卡驱动添加
  13. SWFUpload学习记录
  14. 带你了解软件系统架构的演变
  15. A cycle was detected in the build path of project 'core'. The cycle consists of projects {core, sms}
  16. Focal Loss 简介
  17. Spring Boot框架
  18. python解压缩-[rar]、[zip]
  19. 商业智能时代,大数据分析行业前景
  20. 微信小程序:小秋工具箱开发总结

热门文章

  1. 机器学习中的7种数据偏见
  2. 百度ERNIE登顶GLUE榜单,得分首破90大关
  3. @程序员,Python 3还有哪些未Get的潜藏技能?| 技术头条
  4. TIOBE 2月编程语言排行榜:Python逼近C,Groovy重回TOP 20
  5. 你知道吗?du 和 df 的统计结果为什么不一样
  6. 嗨:VSCode和IDEA都请安装上这个神奇的插件
  7. 再见,FastJson...
  8. 2021全球抗体亲和力预测大赛来了!
  9. 虚数有物理意义:中科大潘建伟、南科大范靖云团队首次实验排除实数形式的标准量子力学...
  10. 阿里大佬总结的算法进阶指南,助你进大厂!