Dropout

news2024/11/15 9:27:55

目录

    • 一、Dropout出现的原因
    • 二、什么是Dropout?
    • 三、为什么Dropout解决过拟合?
      • 3.1 取平均的作用
      • 3.2 减少神经元间复杂的共适应关系
    • 四、实现Dropout—— pytorch
      • example 1
      • example 2
      • example 3
    • 设置dropout参数技巧


一、Dropout出现的原因

在机器学习的模型中

  • 如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象
  • 在训练神经网络的时候经常会遇到过拟合的问题
  • 过拟合具体表现在:
    • 模型在训练数据上损失函数较小,预测准确率较高
    • 但是在测试数据上损失函数比较大,预测准确率较低

过拟合是很多机器学习的通病。

  • 如果模型过拟合,那么得到的模型几乎不能用。
  • 为了解决过拟合问题,一般会采用模型集成的方法,即训练多个模型进行组合
  • 此时,训练模型费时就成为一个很大的问题,不仅训练多个模型费时,测试多个模型也是很费时。

综上所述,训练深度神经网络的时候,总是会遇到两大缺点:

  • 容易过拟合
  • 费时

Dropout可以比较有效的缓解过拟合的发生,在一定程度上达到正则化的效果。


二、什么是Dropout?

Dropout

  • 用来解决overfitting的,如果在训练集上实验效果就不理想,那么加了dropout也救不了
  • Dropout常作用在多层感知机的隐藏层输出上(CNN类用得不多)

Dropout说简单一点就是:

  • 在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作
  • 这样可以使模型泛化性更强
  • 因为它不会太依赖某些局部的特征
  • 如图所示
    在这里插入图片描述
    在这里插入图片描述

三、为什么Dropout解决过拟合?

3.1 取平均的作用

标准的模型, 即没有dropout

  • 用相同的训练数据去训练5个不同的神经网络,一般会得到5个不同的结果

  • 此时可以采用 “5个结果取均值”或者“多数取胜的投票策略”去决定最终结果

  • 这种“综合起来取平均”的策略通常可以有效防止过拟合问题

  • 因为不同的网络可能产生不同的过拟合,取平均则有可能让一些“相反的”拟合互相抵消。

dropout掉不同的隐藏神经元就类似在训练不同的网络

  • 随机删掉一半隐藏神经元导致网络结构已经不同
  • 整个dropout过程就相当于对很多个不同的神经网络取平均
  • 而不同的网络产生不同的过拟合,一些互为“反向”的拟合相互抵消就可以达到整体上减少过拟合

3.2 减少神经元间复杂的共适应关系

因为dropout程序导致两个神经元不一定每次都在一个dropout网络中出现

  • 这样权值的更新不再依赖于有固定关系的隐含节点的共同作用
  • 阻止了某些特征仅仅在其它特定特征下才有效果的情况
  • 迫使网络去学习更加鲁棒的特征 ,这些特征在其它的神经元的随机子集中也存在

换句话说假如神经网络是在做出某种预测,它不应该对一些特定的线索片段太过敏感

  • 即使丢失特定的线索,它也应该可以从众多其它线索中学习一些共同的特征
  • 从这个角度看dropout就有点像L1,L2正则
  • 减少权重使得网络对丢失特定神经元连接的鲁棒性提高

四、实现Dropout—— pytorch

Dropout

  • 训练的时候
    • 需要声明model.train()(不声明也行,因为默认是train状态)
  • 测试的时候
    • 需要声明model.eval()
    • 如果不希望开启dropout进行训练,所有的神经元都参与前向传播和反向传播的话,在训练阶段开启前声明model.eval()即可

example 1


#导入库
import torch
 
 
#神经网络结构声明
net=torch.nn.Sequential(
    torch.nn.Linear(1,16),
    torch.nn.Dropout(p=0.5),
    torch.nn.ReLU(),
    torch.nn.Linear(16,2)
    )
 
net.train()
net.eval()

example 2


Sequential(
  (0): Linear(in_features=1, out_features=16, bias=True)
  (1): Dropout(p=0.5, inplace=False)
  (2): ReLU()
  (3): Linear(in_features=16, out_features=2, bias=True)
)

example 3

class Model(nn.Module):
    def __init__(self):
        super(Model,self).__init__()
        # 定义多层神经网络
        self.fc1 = torch.nn.Linear(8,6)
        self.fc2 = torch.nn.Linear(6,4)
        self.fc3 = torch.nn.Linear(4,1)
        
    def forward(self,x):
        x = F.relu(self.fc1(x))            # 8->6
        x = F.dropout(x,p=0.5)             #dropout 1 此处为dropout
        x = F.relu(self.fc2(x))            #-6->4
        x = F.dropout(x,p=0.5)             # dropout 2  #此处为drouout
        y_pred = torch.sigmoid(self.fc3(x))         # 4->1 ->sigmoid 
        # warnings.warn("nn.functional.sigmoid is deprecated. Use torch.sigmoid instead."
        return y_pred


设置dropout参数技巧

决定Dropout之前

  • 需要先判断是否模型过拟合

dropout=0, 训练后得到模型的一些指标(比如: F1, Accuracy, AP

比较train数据集和test数据集的指标。

  • 过拟合:尝试下面的步骤。
  • 欠拟合:尝试调整模型的结构,暂时忽略下面步骤。

Dropout设置成0.4-0.6之间, 再次训练得到模型的一些指标

  • 如果过拟合明显好转,但指标也下降明显,可以尝试减少dropout(0.2)
  • 如果过拟合还是严重增加dropout(0.2)
  • 重复上面的步骤多次,就可以找到理想的dropout值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/359498.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

处理窗口的常用API函数及窗口处理经验总结(附源码)

目录 1、检测窗口状态 2、将窗口前置显示 2.1、将窗口拉到最前面显示 2.2、将窗口置顶显示 2.3、将窗口设置到指定窗口的上面 3、将不显示的窗口强行显示出来 4、获取窗口的信息 5、通过窗口信息去查找窗口 5.1、调用GetClassName接口去比对窗口的类名 5.2、调用Find…

清理bib文件(删除重复项,仅保留tex中引用的条目)

在写latex文件的过程中,经常会遇到添加了一堆文献的bibtex到bib文件中,有时候文章一长同一篇文献用不同的cite-key引用了多次,同时也会有一些文献最后并没被正文引用,这就需要对bib文件进行清理。 删除重复项 可以用JabRef 在J…

45岁当打之年再创业,剑指中国版ChatGPT,这位美团联合创始人能否圆梦?

文 BFT机器人 “即便只有一个人,我也要出发。” 这是45岁的前美团联合创始人王慧文再次冲上创业沙场的“征战”宣言,这一次他的梦想是“组队拥抱新时代,打造中国OpenAI”。 01 当打之年, AI新梦再起航 “我的人工智能宣言&…

视频投票和图文投票之间的差异投票链接制作平台微擎投票

“我的舞台我的梦”网络评选投票_线上小程序的投票方式_视频投票的功能_在线投票程序用户在使用微信投票的时候,需要功能齐全,又快捷方便的投票小程序。而“活动星投票”这款软件使用非常的方便,用户可以随时使用手机微信小程序获得线上投票服…

Spring中的拦截器

这里写目录标题基本概念HandlerInterceptor拦截器HandlerInterceptor讲解MethodInterceptor拦截器二者的区别基本概念 在web开发中,拦截器是经常用到的功能。它可以帮我们预先设置数据以及统计方法的执行效率等等。 Spring中拦截器主要分两种,一个是Han…

【学习总结】激光雷达与相机外参标定:代码(cam_lidar_calibration)

前段时间尝试了一款激光雷达和相机标定的代码,总结了博客: 【学习总结】激光雷达与相机外参标定:原理与代码 但总觉得那个代码太差劲,而且精度不行,于是又找了些新的代码,体验比之前的好很多,在…

【自然语言处理】主题建模:Top2Vec(理论篇)

主题建模:Top2Vec(理论篇)Top2Vec 是一种用于 主题建模 和 语义搜索 的算法。它自动检测文本中出现的主题,并生成联合嵌入的主题、文档和词向量。 算法基于的假设:许多语义相似的文档都可以由一个潜在的主题表示。首先…

90后,转行软件测试3年,从月入7000+到月入过万,整理出的这一万字经验分享。

周一发工资了,到手12857.65,美滋滋 今年是我毕业参加工作的第3年,工资终于来到5位数了。上一家公司月薪7000,实际拿到手就6450左右,感觉今年真的是元气满满啊,工资翻倍,良好的人生开端。 想起…

Odoo丨Odoo框架源码研读二:ORM框架与日志

Odoo丨Odoo框架源码研读二:ORM框架与日志 而Odoo在实际开发的大多数场景都是基于它的ORM框架进行的,所以本期我们将带来Odoo框架源码的第二期内容——ORM和日志。 *ORM* Odoo是通过Controller控制器,来控制前后台的交互。上一期我们详细的…

算法专题训练营

动归算法专题 1.拆分词句 是不是,在不在都是可以用动归解决的 状态转义方程不一定都是等式,也有可能是条件 2.三角形 动归算法也不是一定要借助新开空间,也是可以用自己原来的空间 3.背包问题 4.分割回文串-ii 5.不同的子序列 贪心算法专题 只管一步的最优结果, 1.分割平衡…

前缀和差分(C/C++)

目录 1. 前缀和的定义 2. 一维前缀和 2.1 计算公式 2.2 用途 2.3 小试牛刀 3. 二维前缀和 3.1 用途 1. 前缀和的定义 对于一个给定的数列A,他的前缀和数中 S 中 S[ i ] 表示从第一个元素到第 i 个元素的总和。 如下图:绿色区域的和就是前缀和数组…

如何在SpringBoot项目上让接口返回数据脱敏,一个注解即可

1 背景需求是某些接口返回的信息,涉及到敏感数据的必须进行脱敏操作2 思路①要做成可配置多策略的脱敏操作,要不然一个个接口进行脱敏操作,重复的工作量太多,很显然违背了“多写一行算我输”的程序员规范。思来想去,定…

关于数字化营销技术实现之【数据埋点】

1.如何实现数据埋点?小程序数据埋点是指在小程序中收集用户行为数据和业务数据的一种技术手段,以便对用户行为和业务运营进行分析和优化。下面是一些实现小程序数据埋点的方法:使用小程序统计分析工具:小程序平台提供了统计分析工…

约束优化:低维线性时间线性规划算法(Seidel算法)、低维线性时间严格凸二次规划算法

文章目录约束优化:低维线性时间线性规划算法(Seidel算法)、低维线性时间严格凸二次规划算法带约束优化问题的定义带约束优化问题的分类及时间复杂度低维线性规划问题定义Seidel线性规划算法低维严格凸二次规划问题定义低维情况下的精确最小范…

【LeetCode】剑指 Offer 09. 用两个栈实现队列 p68 -- Java Version

题目链接:https://leetcode.cn/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/ 1. 题目介绍(09. 用两个栈实现队列) 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别…

【大厂高频必刷真题100题】《是子序列吗?》 真题练习第28题 持续更新~

是子序列吗? 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。 进阶: 如果有…

火山引擎 DataTester:在广告投放场景下的 A/B 实验实践

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 “我知道在广告上的投资有一半是无用的,但问题是我不知道是哪一半。” ——零售大亨约翰沃纳梅克 这句经典名言,被称为广告界的哥特巴赫猜想…

Python脚本批量下载CDS气象数据

使用Python脚本从 Copernicus Climate Data Store (CDS) 检索气象数据具体地,需要检索变量(geopotential、relative_humidity、temperature、u_component_of_wind、v_component_of_wind、vertical_velocity)在各种不同的压力水平、不同的日期…

罗克韦尔AB PLC_FactoryTalk无法登录的解决方法

罗克韦尔AB PLC_FactoryTalk无法登录的解决方法 情况说明: 在打开Studio 5000软件时,出现一个弹窗Log On to FactoryTalk - Network,正常情况下输入Windows账户和密码就可以登录成功。 但是却出现了下图所示窗口,其中‘abseme’是Windows账户名,‘WELL’是计算机名称,下图…

SQL零基础入门学习(二)

SQL SELECT 语句 SELECT 语句用于从数据库中选取数据。 结果被存储在一个结果表中,称为结果集。 SQL SELECT 语法 SELECT column1, column2, ... FROM table_name;与 SELECT * FROM table_name;参数说明: column1, column2, …:要选择的…