深层神经网络和批归一化操作、selu激活函数、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="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相关推荐
- 批归一化和Dropout不能共存?这篇研究说可以
https://www.toutiao.com/a6691855920672014852/ 2019-05-17 12:59:22 自批归一化提出以来,Dropout 似乎就失去了用武用地,流行的深度 ...
- 3.4 归一化网络的激活函数-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 3.3 超参数训练的实践: Pandas vs. Caviar 回到目录 3.5 将 Batch Norm 拟合进神经网络 归一化网络的激活函数 (Normalizing A ...
- ApacheCN《Sklearn 与 TensorFlow 机器学习实用指南》 第11章 项目训练深层神经网络(梯度消失与梯度爆炸,选择初始化,选择激活函数)
原文:https://www.jishux.com/p/52b468ceb5722ca5 第11章 训练深层神经网络 来源:ApacheCN<Sklearn 与 TensorFlow 机器学习实 ...
- selu激活函数和自归一化网络(SNN)
最近出现了一个新的激活函数:缩放指数线性单元(scaled exponential linear units,selu),根据该激活函数得到的网络具有自归一化功能. 首先给出文章地址:https:// ...
- 深度学习笔记第二门课 改善深层神经网络 第三周 超参数调试、Batch正则化和程序框架...
本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...
- 【深度学习】深入理解Batch Normalization批归一化
[深度学习]深入理解Batch Normalization批归一化 转自:https://www.cnblogs.com/guoyaohua/p/8724433.html 这几天面试经常被问到BN层的 ...
- 机器学习实战11-训练深层神经网络
目录 一.梯度消失/爆炸问题 1.1.Xavier( Glorot)初始化(使用逻辑激活函数): 1.2.He 初始化(ReLU 激活函数及其变体,包括简称 ELU 激活): 1.3.非饱和激活函数 ...
- 批归一化作用_批归一化Batch Normalization的原理及算法
一.BN提出的背景意义 本文的背景文献是:<Batch Normalization: Accelerating Deep Network Training by Reducing Interna ...
- 批归一化(Batch Normalization)详解
批归一化(Batch Normalization)详解 文章目录 批归一化(Batch Normalization)详解 前言 一.数据归一化 二.BN解决的问题:Internal Covariate ...
最新文章
- Windows 08 R2_创建AD DS域服务(图文详解)
- maven之setting.xml的配置详解
- 2030年人类将成为混合式机器人?
- 批处理命令 For循环命令详解!
- Java集合框架(一)
- 说明一项最有成就感的php项目,2020 Github 上 10 个最受欢迎的 PHP 项目
- 深度学习会不会被取代?深度学习必看发展史
- int 和 Integer 的区别
- Java中如何去掉字符串中的非法字符(预防SQL注入)
- c语言练习题:求1-1/2+1/3-1/4+... -1/100的值
- 孙鑫VC学习笔记:第十二讲 (五) 往win.ini的文件中写入数据
- 模拟按钮控件BN_CLICKED消息事件
- 2022-2028全球姿势矫正器行业调研及趋势分析报告
- c 添加mysql表单的一行数据类型,MySQL InnoDB表行格式及压缩
- 如何复制权限受限PDF文件的内容(亲测有效,Microsoft Edge打开pdf文件)
- 教你如何看懂体检报告
- Objective-C之父Brad J. Cox去世,他推动了今天苹果的软件生态
- 这款小巧精致的 Keychron K7 满足了我对键盘的所有想象
- Java人脸识别相册分类按时间分类相册按城市分类相册app源码
- OpenCV算法加速的一些学习总结