丢弃法(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

猜你喜欢

转载自blog.csdn.net/qq_33415086/article/details/80031335