Dropout

news/2024/5/2 6:06:52/文章来源:https://blog.csdn.net/weixin_43338969/article/details/129132896

目录

    • 一、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->6x = F.dropout(x,p=0.5)             #dropout 1 此处为dropoutx = F.relu(self.fc2(x))            #-6->4x = F.dropout(x,p=0.5)             # dropout 2  #此处为drououty_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.luyixian.cn/news_show_71858.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“终于懂了” 系列:组件化框架 ARouter 完全解析(三)AGP/Transform/ASM—动态代码注入

ARouter系列文章: “终于懂了” 系列:组件化框架 ARouter 完全解析(一)原理全解 “终于懂了” 系列:组件化框架 ARouter 完全解析(二)APT—帮助类生成 “终于懂了” 系列:组件化框架…

拼多多出评软件工具榜单助手使用教程

软件使用教程下载软件前,关闭电脑的防火墙,退出所有杀毒软件,防止刷单软件被误删桌面建立一个文件夹,下载下来的安装包放进去,解压到当前文件夹,使用过程中别打开防火墙、杀毒软件。打开软件后,…

计算机系统基础知识

计算机的基本组成 计算机组成逻辑图 计算机部件作用 一级部件作用 运算器:计算机的执行部件,受控制器控制,执行算术运算或逻辑运算控制器:决定计算机运行过程的自动化。不仅能保证程序指令的正确执行,还能处理异常事…

代谢组+转录组分析为腰果树果实发育成熟过程中代谢网络提供见解

文章标题:Metabolomic and transcriptomic analyses provide insights into metabolic networks during cashew fruit development and ripening 发表期刊:Food Chemistry 影响因子:9.231 作者单位:海南大学 百趣生物提供服务…

matplotlib学习笔记(持续更新中…)

目录 1. 安装,导入 2. figure,axes(图形,坐标图形) 2.1 figure对象 2.2 axes对象 2.3 代码演示 2.3 subplot() 方法 3. 图表的导出 3.1 savefig() 方法 3.2 代码演示 1. 安装,导入 pip install m…

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

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

大数据周会-本周学习内容总结0102

目录 01、ElasticSearch-学习总结 02、SpringbootElasticSearch构建博客检索系统 01、将MySQL数据同步到ES中 02、SpringBoot集成ES 03、本周学习计划 第一次周会 大数据总监、搜狐四年-中国搜索 【mapReduce】sql 大数据代表:Hadoop、spark、es、flink zookee…

Python字符串处理 -- 内附蓝桥题:门牌制作,卡片

字符串处理 ~~不定时更新🎃,上次更新:2023/02/20 🗡常用函数(方法) 1. s.count(str) --> 计算字符串 s 中有多少个 str 举个栗子🌰 s "1354111" print(s.count(1)) # 答案为…

Java-路径总和

每日一题 Java-路径总和 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。…

Pyspark基础入门4_RDD转换算子

Pyspark 注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark Flink Kafka Hbase Hi…

Head First设计模式---2.观察者模式

观察者(Observer)模式,是一种行为型设计模式,允许你定义一种订阅机制,可以在对象事件发生时通知更多个“观察”该对象的其他对象,类似于“订阅—通知” 问题 假如你有两种类型的对象,顾客和商…

将默认安装的 WSL2 迁移至指定目录

将默认安装的 WSL2 迁移至指定目录WSL2 默认安装在 C 盘下,系统盘空间有限,推荐更改安装目录。 1. 默认安装的 WSL2 目录 C:\Users\cheng\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx 2. …

运筹系列65:TSP问题的精确求解法概述

1. 给定upbound的Christofides方法 这是可以给出上界的一个方法,可以证明构造出的路线不超过最优路线的1.5倍。步骤为: 1)构造MST(最小生成树) 2)将里面的奇点连接起来构成欧拉回路称为完美匹配。Edmonds给…

Docker--------Day2

1.Docker镜像 1.1 是什么 镜像 是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是…

盘点2023年大企业都在用的优秀项目管理软件

行内有句话:每个成功的项目背后肯定有一个成功的项目经理,而每个项目经理背后都少不了一些专业的项目管理工具。要在任何项目中取得成功,对项目进行全面的管理非常关键,包括项目的执行、计划、推进、监控、结果等,有了…

[架构之路-114]-《软考-系统架构设计师》-软件架构设计-7-软件架构评估

前言第7节 软件架构评估7.1 什么是架构评估/为什么要软件架构评估在软硬件系统总体架构设计完成之后,为保证架构设计的合理性、完整性和针对性,从根本上保证系统质量,降低成本及投资风险,需要对总体架构进行评估。7.2 软件架构评估…

rk3568网口CAN串口通信速率性能

通信接口性能参数外设接口性能参数测试结果为实验室实测值,可作为设计参考,但因测试环境和器件批次差异,可能会存在一定的误差,且测试结果依赖评估板性能,核心板搭配不同底板性能也可能存在差异,请结合实际…

OpenEuler安装软件方法

在树莓派上烧录好OpenEuler后上面是什么软件都没有的,像一些gcc的环境都需要自己进行配置。官方提供的安装命令是yum,但是执行yum是找不到命令的:   这个其实是因为OpenEuler中默认的安装软件使用了dnf而不是yum,所以软件的安装…

《Python机器学习》安装anaconda + numpy使用示例

👂 小宇(治愈版) - 刘大拿 - 单曲 - 网易云音乐 目录 一,安装 二,Numpy使用示例 (一)Numpy数组的创建和访问 1,创建和访问Numpy的一维数组和二维数组 2,Numpy数组…

可调恒流驱动LED电路分析

https://www.icxbk.com/article/detail?aid884 常规使用的pwm调亮度不仅会导致频闪,而且在长时间使用的时候,有损坏led的风险,所以这次设计了一个恒流调亮度电路,其电路图如下所示 电路原理的解读: 左侧的电位计起着…