深度学习之Dropout层
程序员文章站
2022-07-13 10:08:32
...
Dropout层
过程
相当于在一个大的网络模型中每次随机小模型,类似在模拟集成学习。
避免过拟合
例如在图示中,通过Dropout层,每次选择网络中的一部分继续计算传递。
实现
可以使用keras Dropout层实现,这里自定义一个方法。
import numpy as np
#X输入 drop_probability丢失的概率
def dropout(X, drop_probability):
keep_probability = 1 - drop_probability
assert 0 <= drop_probability <= 1
if keep_probability == 0:
return X.zeros_like()
sample=np.random.binomial(1,keep_probability,size=X.shape)
X *=sample
#这里除是因为要使得输入矩阵期望保持一致
scale = 1/keep_probability
return X*scale
测试:
A = np.arange(20).reshape((5, 4))
dropout(A, 0.5)
#输出:
#array([[ 0., 0., 0., 6.],
# [ 8., 10., 12., 0.],
# [ 0., 18., 0., 0.],
# [ 0., 26., 28., 0.],
# [32., 34., 36., 38.]])
完整代码
注意点:
通常模型是这么一个过程:
全链接层 -> **函数 -> 丢弃层
不过一般情况下将越接近输出层的丢失层概率设置更小一些,可以理解为越接近输出层模型参数更重要。例如:
全链接层 -> **函数 -> 丢弃层(0.5) -> **函数 -> 丢弃层(0.1)
上一篇: 深度学习之dropout的实现
推荐阅读
-
深度学习之浅见
-
h5文件之深度学习数据集制作
-
深度学习之美(张玉宏)——第四章 人生苦短我用python
-
荐 Python之深度学习入门
-
Python编程深度学习计算库之numpy
-
Python编程深度学习绘图库之matplotlib
-
深度之眼Pytorch打卡(十五):Pytorch卷积神经网络部件——转置卷积操作与转置卷积层(对转置卷积操作全网最细致分析,转置卷积的stride与padding,转置与反卷积名称论证)
-
吴恩达之深度学习和神经网络-2.10-2.12向量化
-
Coursera吴恩达《神经网络与深度学习》课程笔记(3)-- 神经网络基础之Python与向量化
-
MXNet动手学深度学习笔记:Gluon实现Dropout