美文网首页机器学习与深度学习
[网络层]什么是 Dropout

[网络层]什么是 Dropout

作者: LCG22 | 来源:发表于2021-04-22 16:37 被阅读0次

    参考资料:

    深度学习中Dropout原理解析

    Dropout详解

    1、什么是 Dropout

    在前向传播的过程中,让某个神经元的激活值以一定的概率 P 停止工作,可以使模型更加泛化,不会太依赖某些神经元。因为每次都相当于在训练一个新的模型,所以可以有效避免模型发生过拟合。

    2、为什么要引入 Dropout 

    因为当模型比较复杂,而训练样本却较少的时候,容易发生过拟合。而 Dropout 则是通过每次随机地让一批神经元停止工作,可以降低模型的复杂度,从而使得模型不容易发生过拟合。

    3、Dropout 的计算过程

    第一步:对于每一个隐藏层的神经元节点

    第二步:在 pytorch 中,随机使所有的神经元节点 N 以概率 P 停止工作,此时停止工作的神经元节点数为 NP 个,并保存被停止工作的神经元节点的权重

    第三步:根据反向梯度传播来更新没被停止工作的神经元节点的权重,然后除以概率 P 来对权重进行缩放

    第四步:恢复第二步中被停止的神经元节点的权重

    第五步:重复第一至第四步,直到训练结束

    4、Dropout 的优点

    ① 防止过拟合

    ② 减少神经元之间的复杂共适应关系。使用 Dropout 后,可以使得网络中的权值更新,不再依赖于某些特定的神经元之间的共同作用,可以变得更鲁棒。

    5、Dropout 的缺点

    ① 

    6、Pytorch 中的 Dropout 函数作用和参数详解

    torch.nn.Dropout(p=0.5, inplace=False)

    函数作用:随机对张量中的元素置为 0,即 p 实际上是神经元节点停止工作的概率,且只是概率的期望是 p,并不意味着每次概率都是 p。另外在每次前向传播过程中,每次被置为 0 的元素都是随机选择的。

    参数详解

    inplace:默认为 False,即不进行覆盖运算,默认为 True 的话,则会对输入进行覆盖运算,此时减少了申请和注销内存的操作,会提高运行效率

    例子:

    from torch import nn

    import torch

    dropout = nn.Dropout(p=0.7)

    x=np.asarray([1,2,3,4,5,6,7,8,9,10],dtype=np.float32)

    dropout(torch.as_tensor(x))

    结果:

    tensor([ 0.0000, 6.6667, 10.0000, 0.0000, 0.0000, 0.0000, 0.0000, 26.6667,

            0.0000,  0.0000])

    相关文章

      网友评论

        本文标题:[网络层]什么是 Dropout

        本文链接:https://www.haomeiwen.com/subject/eoexrltx.html