欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

深度学习之Dropout层

程序员文章站 2022-07-13 10:08:32
...
Dropout层
过程

相当于在一个大的网络模型中每次随机小模型,类似在模拟集成学习。
避免过拟合
例如在图示中,通过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)