Dropout层的个人理解和具体使用

news/2024/12/28 15:42:16/

Dropout层的作用

        dropout 能够避免过拟合,我们往往会在全连接层这类参数比较多的层中使用dropout;在训练包含dropout层的神经网络中,每个批次的训练数据都是随机选择,实质是训练了多个子神经网络,因为在不同的子网络中随机忽略的权重的位置不同,最后在测试的过程中,将这些小的子网络组合起来,类似一种投票的机制来作预测,有点类似于集成学习的感觉。

  关于dropout,有nn.Dropoutnn.functional.dropout两种。推荐使用nn.Dropout,因为一般情况下只有训练train时才用dropout,在eval不需要dropout。使用nn.Dropout,在调用model.eval()后,模型的dropout层和批归一化(batchnorm)都关闭,但用nn.functional.dropout,在没有设置training模式下调用model.eval()后不会关闭dropout。
  这里关闭dropout等的目的是为了测试我们训练好的网络。在eval模式下,dropout层会让所有的激活单元都通过,而batchnorm层会停止计算和更新mean和var,直接使用在train训练阶段已经学出的mean和var值。同时我们在用模型做预测的时候也应该声明model.eval()。

注⚠️:为了进一步加速模型的测试,我们可以设置with torch.no_grad(),主要是用于停止autograd模块的工作,以起到加速和节省显存的作用,具体行为就是停止梯度gradient计算和储存,从而节省了GPU算力和显存,但是并不会影响dropout和batchnorm层的行为,这样我们可以使用更大的batch进行测试。

model.eval()下不启用 Batch Normalization 和 Dropout。
如果模型中有BN层(Batch Normalization)和Dropout,在测试时添加model.eval()。model.eval()是保证BN层能够用全部训练数据的均值和方差,即测试过程中要保证BN层的均值和方差不变。对于Dropout,model.eval()是利用到了所有网络连接,即不进行随机舍弃神经元。

下面一段话是关于BN层的解释:

在训练过程中,Dropout的实现是让神经元以超参数p的概率停止工作或者激活被置为0,未被置为0的进行缩放,缩放比例为1/(1-p)

Dropout正则化

  • 概念

    • 每次迭代过程中按照层,随机选择某些节点删除前向和后向连接

    • 注意:对隐藏层的某一个节点给删掉 (dropout的时候,神经网络的输入和输出节点个数没有发生变化)

  • 看成机器学习中的集成方法(ensemble technique)

    • 删除一些神经元, 减少模型复杂度, 也减少了过拟合

  • 被失活的神经元输出为0 其他神经元被放大 1/(1-rate)倍

  • 只在网络训练时有效, 模型预测时无效

  • 神经网络中独有的方法

  • 重中之重:随机置零的是神经元,也就是forward里的self.linear(x)里的x

注意:Dropout只针对隐藏层来说的!!!

代码实现:

单纯调用Dropout:

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optimdef dropout_test():torch.random.manual_seed(0)inputs = torch.randn(2, 5)dropout = nn.Dropout(p=0.4)print("dropout之前=>>>inputs", inputs)out = dropout(inputs)print("dropout之后=>>>inputs", out)print("各个元素乘以 1 / (1-p)=>>>", inputs * 1 / (1 - 0.4))if __name__ == '__main__':dropout_test()

运行结果:

上图展示了“在训练过程中,Dropout的实现是让神经元以超参数p的概率停止工作或者激活被置为0,未被置为0的进行缩放,缩放比例为1/(1-p)”这句话的体现!!!

nn.Module类型的例子:

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optimclass LinearModule(nn.Module):def __init__(self):super().__init__()self.linear1 = nn.Linear(in_features=3, out_features=5)self.linear2 = nn.Linear(in_features=5, out_features=20)self.out = nn.Linear(in_features=20, out_features=2)self.dropout = nn.Dropout(p=0.2)def forward(self, x):x = self.linear1(x)print("Dropout前的权重=>>>", x)x = self.dropout(x)print("Dropout后的权重=>>>", x)x = torch.relu(x)x = self.linear2(x)x = self.dropout(x)x = torch.relu(x)out = self.out(x)return F.log_softmax(out, dim=1)def train():learning_rate = 0.1inputs = torch.randn(5, 3, dtype=torch.float32)label = torch.tensor([1, 0, 1, 0, 0], dtype=torch.int64)model = LinearModule()optimizer = optim.Adam(model.parameters(), lr=learning_rate)criterion = nn.NLLLoss()y_pred = model(inputs)loss = criterion(y_pred, label)optimizer.zero_grad()loss.backward()optimizer.step()if __name__ == '__main__':train()

运行结果:

 


http://www.ppmy.cn/news/105649.html

相关文章

Python之字符串(str)基础知识点

strip() 删除指定字符 当token为空时,默认删除空白符(含’\n’,‘\r’,‘\t’,’ ),当非空时,根据指定的token进行删除。 字符的删除又可分为以下几种情况: string.strip(token):删除string字符串中开头(left)、结尾处(right)的…

《A New General Type-2 Fuzzy Predictive Scheme for PID Tuning》翻译,2021年

《一种新的用于PID整定的通用2型模糊预测方案》 摘要 PID控制器在各种工业应用中被广泛使用。但是,在许多有噪音的问题中,需要强有力的方法来优化PID参数。在本文中,介绍了一种通过模型预测控制和广义 2 型模糊逻辑系统调整比例-积分-微分参数…

【满分】【华为OD机试真题2023B卷 JAVAJS】经典屏保

华为OD2023(B卷)机试题库全覆盖,刷题指南点这里 经典屏保 知识点循环迭代编程基础 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: DVD机在视频输出时,为了保护电视显像管,在待机状态会显示“屏保动画”,如下图所示,DVD Logo在屏幕内来回运动,碰到边缘会反弹…

微前端——qiankun配置方法

什么是微前端 微前端是指存在于浏览器中的微服务,其借鉴了微服务的架构理念,将微服务的概念扩展到了前端。 如果对微服务的概念比较陌生的话,可以简单的理解为微前端就是将一个大型的前端应用拆分成多个模块,每个微前端模块可以…

C进阶:数据在内存中的存储(1)

引入: 大家好,感谢大家最近的支持,今天也是开始了C进阶一系列的博文的创作,欢迎大佬们来指点,欢迎来一起沟通!!! 数据类型的介绍 我们都知道:C语言具有以下几种数据类…

【Zero to One系列】在WSL linux系统上,使用docker运行Mysql与Nacos,以及如何启动与停止WSL

前期回顾: 【Zero to One系列】window系统安装Linux、docker 1、下载docker-compose 1.下载: curl -SL https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose 2.授予权限&a…

十、Camera 启动流程分析

和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、Camera 启动流程概览二、Launcher 跟Camera APP 交互三、Camera app 与FWK Camera Service 交互四、Camera FWK 与 Camera HAL 交互五、Camera FWK…

5.29-kubernetes learning

文章目录 HomeGet StartedThe kubernetes network model First of all ,we should understand the layout of this official website page. Home The Home chapter is that the official website has manuals for different versions of k8s ,and then generally…