《动手学深度学习》第八天--丢弃法

深度学习模型常常使用丢弃法(dropout) 来应对过拟合问题,本节中提到的丢弃法特指倒置丢弃法(inverted dropout)。

(一)方法

由于丢弃法在训练中隐藏层神经元的丢弃是随机的,输出层的计算无法过度依赖隐藏单元中的任一个,从而可以用来应对过拟合。

(二)从零开始实现

下面的dropout函数将以drop_prob的概率丢弃NDArray输入X中的元素。

mxnet.ndarray.random.uniform(low=0, high=1, shape=_Null, dtype=_Null, ctx=None, out=None, **kwargs)
从均匀分布中抽取随机样本。样本均匀分布在半开放区间[低、高(包括低,但不包括高)。

定义函数dropout(X, drop_prob):
若丢弃概率为1,即保持概率为0,那么输出和X形状一样的0矩阵
若丢弃概率在0–1之间,利用random.uniform函数从均匀分布中生成和X形状一样的样本mask,我们来看一下这个过程:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
定义模型参数:
定义一个包含两个隐藏层的多层感知机,其中两个隐藏层的输出个数都是256。需要3个W,和3个b参数。

定义模型:
下面定义的模型将全连接层和激活函数ReLU串起来,并对每个激活函数的输出使用丢弃法。
先回顾一下下面两个函数的用法:
在这里插入图片描述在这里插入图片描述
定义的模型利用relu()将全连接层和激活函数连接起来,接着利用函数is_training()来判断是在训练还是测试,只在训练时使用丢弃法。第一层完成后第二层重复操作。

训练和测试模型:
首先回顾两个函数:
在这里插入图片描述softmax回归从零开始中的函数:
在这里插入图片描述
利用这两个函数实现训练和测试。

(三)简洁实现

在Gluon中,我们只需要在全连接层后添加Dropout层并指定丢弃概率。在训练模型时,Dropout层将以指定的丢弃概率随机丢弃上一层的输出元素;在测试模型时,Dropout层并不发挥作用。

①首先仍然是对于net引入Sequential容器,然后添加第一个隐藏层和激活函数,第一个丢弃层,第二个隐藏层和激活函数,第二个丢弃层。最后对参数初始化。
②引入Trainer,然后利用函数train_ch3训练实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值