动手学深度学习4.6 Video 13/chapter_multilayer-perceptrons/dropout.ipynb

复述一遍主要过程

暂退法(dropout)

  1. 手动定义dropout_layer(X, dropout)函数。输入为X, dropout=0.6表示有0.6的概率会被丢弃,其余元素除以0.4。
  2. 以class的形式,将该函数写入forward里,并用self.training参数控制是否dropout。
  3. 与往常一样,定义dataloader,loss, ,optimizer,对网络net里的权重进行优化。
  4. 简洁实现即直接堆叠nn.Sequential(),在里面堆nn.Dropout(dropout).

小细节

在 PyTorch 中,self.training 是一个布尔属性,用于指示当前模型是否处于训练模式。这是 torch.nn.Module 类的一部分。这个属性在模型的前向传播方法中经常被用来区分训练和评估模式,从而执行不同的操作(例如,启用或禁用 dropout、batch normalization 等)。

self.training 的变化
当你调用 model.train() 时,self.training 被设置为 True,表示模型处于训练模式。
当你调用 model.eval() 时,self.training 被设置为 False,表示模型处于评估模式。
所以dropout的类定义实现里的forward函数,通过控制它的值,来控制训练和评估时的数据流动。

小结

  • 暂退法在前向传播过程中,计算每一内部层的同时丢弃一些神经元。
  • 暂退法可以避免过拟合,它通常与控制权重向量的维数和大小结合使用的。
  • 暂退法将活性值 h h h替换为具有期望值 h h h的随机变量。
  • 暂退法仅在训练期间使用。

练习

  1. 如果更改第一层和第二层的暂退法概率,会发生什么情况?具体地说,如果交换这两个层,会发生什么情况?设计一个实验来回答这些问题,定量描述该结果,并总结定性的结论。

    答:一般而言,增加第一层的dropout可能会减少过拟合风险,适当调整第二层的dropout可能会影响模型的容量和性能。(瞎猜的,具体靠感觉)
    可以写代码验证一下,不同的数据集可能有不一样的超参表现。

请添加图片描述

(0.5,0.2)表示第一层为0.5, 第二层dropout为0.2。
从测试集的角度来看,第一种组合更优。

  1. 发明另一种用于在每一层注入随机噪声的技术,该技术不同于标准的暂退法技术。尝试开发一种在Fashion-MNIST数据集(对于固定架构)上性能优于暂退法的方法。

    答:每层加入高斯噪声训练,最后测试不用高斯噪声。(一定要用self.training参数控制)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值