丢弃法(Dropout)

原文链接见 丢弃法(Dropout)—— 从零开始
在深度学习中,一个常用的应对过拟合(overfitting)问题的方法叫做丢弃法。

概念

在现代神经网络中,我们所指的丢弃法,通常是对输入层或者隐含层进行一下操作:
1. 随机选择一部分该层的输出作为丢弃元素
2. 把丢弃元素乘以0
3. 把非丢弃元素拉伸

本质

在集成学习里,我们可以对训练数据集有放回地采样若干次并分别训练若干个不同的分类器;测试时,把这些分类器的结果集成一下作为最终分类结果。
事实上,丢弃法在模拟集成学习。假设,下图的多层神经网络是原始网络的子集。
网络
对其使用丢弃法。而对于每一个这样的数据集,均使用丢弃法分别训练一个原神经网络子集的分类器。而每个原神经网络子集的分类器用的是同一套参数。
因此,使用丢弃法的神经网络实质上是对输入层和隐含层的参数做了正则化,同一套参数使得神经网络不同子集在训练数据上都尽可能表现良好。

定义包含丢弃层的模型

drop_prob1 = 0.2
drop_prob2 = 0.5

def net(X):
    X = X.reshape((-1, num_inputs))
    # 第一层全连接。
    h1 = nd.relu(nd.dot(X, W1) + b1)
    # 在第一层全连接后添加丢弃层。
    h1 = dropout(h1, drop_prob1)
    # 第二层全连接。
    h2 = nd.relu(nd.dot(h1, W2) + b2)
    # 在第二层全连接后添加丢弃层。
    h2 = dropout(h2, drop_prob2)
    return nd.dot(h2, W3) + b3
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
丢弃Dropout)是一种常用于神经网络的正则化方,它可以减少过拟合现象的发生,提高模型的泛化能力。 具体来说,丢弃是通过随机地将神经网络中的部分神经元设置为0来达到正则化的目的。这些被设置为0的神经元在前向传播和反向传播过程中都会被忽略,从而使得网络的训练过程具有随机性,可以有效地防止过拟合。 下图展示了一个具有两个隐藏层的神经网络,其中每个隐藏层都包含4个神经元。在使用丢弃时,我们可以随机地将每个隐藏层中的一定比例的神经元设置为0,如下图所示: ![Dropout](https://img-blog.csdn.net/20170726230329227?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzcyOTQzNzQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/70) 如图所示,我们将第一个隐藏层中的第1、3个神经元和第二个隐藏层中的第2、4个神经元设置为0,这样就形成了一个新的、被丢弃了部分神经元的神经网络。在正向传播和反向传播过程中,我们都会忽略这些被丢弃的神经元,从而提高模型的泛化能力。 需要注意的是,在测试阶段,我们不再使用丢弃,而是使用所有的神经元进行前向传播。这是因为在测试阶段,我们需要得到一个确定的输出结果,而丢弃会对每次测试的结果产生随机性。因此,在测试阶段,我们需要使用所有的神经元来得到一个确定的输出结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值