深层神经网络其实对比之前的分类模型,他的网络层数更深,层数更多,但是,有时候也会造成过拟合的风险因为参数过多,导致全部拟合完容易记住样本。

model = keras.models.Sequential()
model.add(keras.layers.Flatten(input_shape=[28,28]))
for _ in range(20):model.add(keras.layers.Dense(100,activation="relu"))
model.add(keras.layers.Dense(10,activation="softmax"))

下面是批归一化的操作,其实很简单,就是在下面加一个归一化命令

model = keras.models.Sequential()
model.add(keras.layers.Flatten(input_shape=[28,28]))
for _ in range(20):model.add(keras.layers.Dense(100,activation="relu"))model.add(keras.layers.BatchNormalization())"""model.add(keras.layers.Dense(100))model.add(keras.layers.BatchNormalization())model.add(keras.layers.Activation('relu'))"""
model.add(keras.layers.Dense(10,activation="softmax"))

有人对归一化和激活函数先后顺序有着不同意见,其实差不多
批归一化可以减缓梯度消失现象,让更快的收敛

下面换一种新的激活函数:selu
selu自带归一化

ReLU
Sigmoid激活函数现在基本上没有人在使用了,大家都用ReLU。

ReLU的好处:它可以对抗gradient vanishin(梯度消失)等等;

自从有了ReLU以后,就有各式各样的变形,举例来说,有一个东西叫做Leaky ReLU,Leaky ReLU就是说小于0的地方我们不是乘0,我们小于零的地方乘上0.01,马上就会有人问说为什么是乘0.01呢 ? 那么就出现了Parametric ReLU,Parametric ReLU就是说小于0的地方,我们就乘上一个
a,至于a的值多少根据training data把它learn出来。

后来又有人想了一招叫Randomized ReLU,那就我所知,Randomized ReLU应该是没有paper的,但是某一个比赛的时候有人用了这一招,然后就得到好的结果,所以就被广为流传这个叫Randomized ReLU,他是说我们今天小于0的地方一样是乘上,但是的值也不是从data learn出来的,他是从distribution做sample出来的。也就是说以前在做training的时候,每次你的都是不一样的,但是在testing的时候你会fix住你的,他就有点类似它是想要做到类似有点dropout的效果。

ELU
后来有人提出了一个ReLU的进化版叫做ELU,ELU就是Exponential Linear Unit的意思,如果他在大于0的地方跟其他的ReLU的家族是一样的,不一样的地方是在小于零的地方,它是乘上的次方减1,就是那个激活函数的input,所以你可以想象说假设等于0的时候,=0,所以这边是接在一起的。而如果趋向于负无穷大的时候,的负无穷大次方是零,0减-1是-1,然后再乘,所以是,所以如下图绿色的线会收敛在。

SELU
上面那个ELU,要设多少?后来又出现一种新的方法,叫做:SELU。它相对于ELU做了一个新的变化:就是现在把每一个值的前面都乘上一个入,然后他告诉你说入跟a应该设多少,然后。

他的特点是:
它的值有正有负:在整个ReLU的family里里面,除了一开始最原始的ReLU以外都有负值,所以这个特性还好;
有 Saturation Region:其他的ReLU他们没有Saturation Region(饱和区),但是他有Saturation Region,不过ELU其实也有Saturation Region,因为SELU就只是ELU乘上一个而已;乘上这个有什么不同?乘上,让它在某些区域的斜率是大于的,意味着说你进来一个比较小的变化,通过Region以后,他把你的变化放大1.0507700987倍,所以它的input能是会被放大的,而且这是他一个ELU的没有的特色。

model = keras.models.Sequential()
model.add(keras.layers.Flatten(input_shape=[28,28]))
for _ in range(20):model.add(keras.layers.Dense(100,activation="selu"))
#selu自带归一化,缓解梯度消失
model.add(keras.layers.Dense(10,activation="softmax"))

下面添加dropout

model = keras.models.Sequential()
model.add(keras.layers.Flatten(input_shape=[28,28]))
for _ in range(20):model.add(keras.layers.Dense(100,activation="selu"))
#dropout用来防止过拟合,a—dropout保证均值和方差不变,归一化性质不变
#rate代表丢掉单元的数目比例是多少。0.5时候网络最大
model.add(keras.layers.AlphaDropout(rate=0.5))
#selu自带归一化,缓解梯度消失
model.add(keras.layers.Dense(10,activation="softmax"))

深层神经网络和批归一化操作、selu激活函数、dropout相关推荐

  1. 批归一化和Dropout不能共存?这篇研究说可以

    https://www.toutiao.com/a6691855920672014852/ 2019-05-17 12:59:22 自批归一化提出以来,Dropout 似乎就失去了用武用地,流行的深度 ...

  2. 3.4 归一化网络的激活函数-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.3 超参数训练的实践: Pandas vs. Caviar 回到目录 3.5 将 Batch Norm 拟合进神经网络 归一化网络的激活函数 (Normalizing A ...

  3. ApacheCN《Sklearn 与 TensorFlow 机器学习实用指南》 第11章 项目训练深层神经网络(梯度消失与梯度爆炸,选择初始化,选择激活函数)

    原文:https://www.jishux.com/p/52b468ceb5722ca5 第11章 训练深层神经网络 来源:ApacheCN<Sklearn 与 TensorFlow 机器学习实 ...

  4. selu激活函数和自归一化网络(SNN)

    最近出现了一个新的激活函数:缩放指数线性单元(scaled exponential linear units,selu),根据该激活函数得到的网络具有自归一化功能. 首先给出文章地址:https:// ...

  5. 深度学习笔记第二门课 改善深层神经网络 第三周 超参数调试、Batch正则化和程序框架...

    本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...

  6. 【深度学习】深入理解Batch Normalization批归一化

    [深度学习]深入理解Batch Normalization批归一化 转自:https://www.cnblogs.com/guoyaohua/p/8724433.html 这几天面试经常被问到BN层的 ...

  7. 机器学习实战11-训练深层神经网络

    目录 一.梯度消失/爆炸问题 1.1.Xavier( Glorot)初始化(使用逻辑激活函数): 1.2.He 初始化(ReLU 激活函数及其变体,包括简称 ELU 激活): 1.3.非饱和激活函数 ...

  8. 批归一化作用_批归一化Batch Normalization的原理及算法

    一.BN提出的背景意义 本文的背景文献是:<Batch Normalization: Accelerating Deep Network Training by Reducing Interna ...

  9. 批归一化(Batch Normalization)详解

    批归一化(Batch Normalization)详解 文章目录 批归一化(Batch Normalization)详解 前言 一.数据归一化 二.BN解决的问题:Internal Covariate ...

最新文章

  1. Windows 08 R2_创建AD DS域服务(图文详解)
  2. maven之setting.xml的配置详解
  3. 2030年人类将成为混合式机器人?
  4. 批处理命令 For循环命令详解!
  5. Java集合框架(一)
  6. 说明一项最有成就感的php项目,2020 Github 上 10 个最受欢迎的 PHP 项目
  7. 深度学习会不会被取代?深度学习必看发展史
  8. int 和 Integer 的区别
  9. Java中如何去掉字符串中的非法字符(预防SQL注入)
  10. c语言练习题:求1-1/2+1/3-1/4+... -1/100的值
  11. 孙鑫VC学习笔记:第十二讲 (五) 往win.ini的文件中写入数据
  12. 模拟按钮控件BN_CLICKED消息事件
  13. 2022-2028全球姿势矫正器行业调研及趋势分析报告
  14. c 添加mysql表单的一行数据类型,MySQL InnoDB表行格式及压缩
  15. 如何复制权限受限PDF文件的内容(亲测有效,Microsoft Edge打开pdf文件)
  16. 教你如何看懂体检报告
  17. Objective-C之父Brad J. Cox去世,他推动了今天苹果的软件生态
  18. 这款小巧精致的 Keychron K7 满足了我对键盘的所有想象
  19. Java人脸识别相册分类按时间分类相册按城市分类相册app源码
  20. OpenCV算法加速的一些学习总结

热门文章

  1. 前后端具备的管理系统开源项目免费模板
  2. Android SDK下载和环境变量配置
  3. 大鼠MCAO模型 临床前研究中利用动物模型模拟缺血性中风
  4. 运算符重载和转换构造函数相等的情况
  5. 十大iOS角色扮演游戏盘点
  6. 容易和不易导入生产计划系统的工厂
  7. 全球首发!老子云支持三维格式多达66种,可解决95%模型展示难题
  8. matlab二阶迎风差分格式,热传导方程几种差分格式的MATLAB数值解法比较
  9. [464]Outlook如何备份邮件
  10. 终于有人把Java程序员必学知识点整理出来了,令人有如醍醐灌顶