深度学习种 数据shuffle对模型性能的影响

2023-11-04

博客部分内容参照链接:https://blog.csdn.net/g_b_l/article/details/109600536

相同的两个目标检测实验,模型进行shuffle和未进行shuffle时训练的loss图,发现:未经shuffle的loss曲线出现周期性的震荡,测试后模型的泛化效果也很差。如下图1(未shuffle)和图2(shuffle)所示:

                                                                                                                  图1 未shuffle实验的loss曲线

                                                                                                                       图2 未shuffle实验的loss曲线

在模型训练前,我们往往对数据进行shuffle,即随机打乱数据,为什么要这么做呢?不这么做会出现什么问题?何时应该shuffle,何时不该shuffle呢?

下面,本文就以上三个问题发表下自己的拙见。

Q1:为什么要进行shuffle?

A1:不论是机器学习还是深度学习,我们总是基于数据独立同分布的假设条件,也就是说,数据的出现应该是随机的,而不是按照某种顺序排列好的。以上就是需要shuffle的根本原因。因此,我们需要在每个epoch的开始把数据shuffle一下。

 

Q2:不shuffle会出现什么问题?

A2:泛化能力差

①模型学到的可能只是数据次序,并未学到有用的信息,导致泛化能力差。

②如果数据是排序过的,比如按类别排序,会导致模型一会儿过拟合这个类,一会儿过拟合那个类,这一方面会使得训练过程的loss周期性震荡;另一方面,在训练结束时,模型总是对最近训练的那类数据过拟合而导致泛化能力差

比如做公式识别(将图片的公式转换为latex形式),如果不shuffle,按图片的宽高比排列数据,且第一张图片和最后一张图片的宽高比相差很大,在这种情况下,不shuffle直接训练,就会出现loss周期性震荡的现象,比如每个epoch的开始,loss会突然上升很多,然后逐渐下降,等下一个epoch开始的时候,loss又会突然上升,循环往复。

 

Q3:何时应该shuffle,何时不该shuffle呢?

A3:当我们使用优化器进行模型训练时,比如使用SGD优化方法,不可避免地,在结束模型训练时,模型对刚刚学习过的那类数据有着更好的表现。

因此,①如果我们想让模型泛化能力更强,我们应该对数据进行shuffle,这样模型最后见过的数据在一定程度上是能代表总体的,有着更强的泛化能力,通常情况下,我们都是要进行shuffle的。

②如果我们想让模型学会某种次序关系或者我们希望模型对某部分数据表现的更好一点,那么我们则要根据自己的目的来决定数据的顺序,并决定是局部shuffle还是完全不shuffle比如,对于时间序列数据,根据过去的数据预测未来的数据,我们则希望越近期的数据,模型给予更高的关注度,一种方式就是将近期的数据放在后面,那么等模型训练完的时候,最近见过的数据就是近期的数据,自然对近期数据有更高的关注,这样在预测未来数据的时候,近期的数据能发挥更大的作用。

所以,是否shuffle要具体情况具体分析。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习种 数据shuffle对模型性能的影响 的相关文章

随机推荐

  • C/S与P2P的主要区别以及相同点

    C S方式所描述的是进程之间服务和被服务的关系 客户是服务的请求方 服务器是服务的提供方 服务的请求方和提供方都要使用网络核心部分所提供的服务 客户程序被用户调用后运行 在通信时主动向远地服务器发起通信 服务请求 因此 客户程序必须知道服务
  • Python爬虫系列(二)——Python爬虫批量下载百度图片

    1 前言 先贴代码 coding utf8 import requests import json from urllib import parse import os import time class BaiduImageSpider
  • 关于LayUI 表格高度解决方案

    需求是这样式的 我有一个产品列表 但是我想在产品列表中显示产品主图信息 本文只涉及LayUI技巧 不涉及JAVA JS 渲染部分 table render cellHeight 300 elem currentTableId url Pro
  • AIX 上压缩与解压缩

    gz gzip d 或 gunzip gzip Z uncompress compress tar tar xvf tar cvf cpio cpio idumv zip unzip 或 jar xvf tar gz gzip dc tar
  • 心跳包实现的另一种机制

    因为工作关系 经常用到心跳包 之前是在服务端中的连接的实体中保持一个timer 每秒加一 每次服务端接到客户端的心跳 就会把计数置为0 当累加到20秒的时候 服务端会接到客户端抛出的掉线函数回调 就会视为客户端掉线 然后从缓存中删掉掉线用户
  • 一次性搞懂什么是AIGC!

    你知道什么是AIGC吗 不知道 没关系 我来告诉你 AIGC就是人工智能生成内容 Artificial Intelligence Generative Content 也就是让AI自己动手创作各种各样的内容 比如图片 视频 音乐 文字等等
  • DNSPod 查看域名解析的 domain_id 和 record_id

    本文介绍调用 API 获取 DNSPod 域名解析需要的 domain id 和 record id 参数的方法 所有的 DNSPod API 请求都必须提供 login token作为公共参数以验证用户身份是否合法 获取 login to
  • 软件版本命名规范

    1 版本命名规范 1 2 3 20190114 rc 由四部分组成 第一位 1 主版本号 当功能模块有较大的变动 比如增加多个模块或者整体架构发生变化 此版本号由项目决定是否修改 第二位 2 子版本号 当功能有一定的增加或变化 比如增加了对
  • [小程序实现保存图片到相册]

    保存图片到相册 实现逻辑 首先查看用户申请过的权限中是否有 保存图片到相册 如果没有这个权限 则需要先申请权限 弹窗授权 如果用户同意授权则保存图片 如果用户不同意 则跳转到设置页 重新授权 然后再保存图片 查看用户申请的全县有哪些 通过微
  • Httpservlet cannot be resolved to a type的原因与解决方法

    刚开始学习Servlet 在Eclipse中新建了一个Servlet 不过页面上报错 Httpservlet cannot be resolved to a type 显然是Eclipse找不到相应的包 即javax servlet 原因
  • 重建控制文件 recreate control file

    简单总结如下 1 启动到mount2 执行Alter database backup controlfile to trace 3 找到第2步生成的trace文件 并作相应修改 只保留创建语句4 shutdown并启动到nomount 执行
  • 2023备战金三银四,Python自动化软件测试面试宝典合集(二)

    马上就又到了程序员们躁动不安 蠢蠢欲动的季节 这不 金三银四已然到了家门口 元宵节一过后台就有不少人问我 现在外边大厂面试都问啥 想去大厂又怕面试挂 面试应该怎么准备 测试开发前景如何 面试 一个程序员成长之路永恒绕不过的话题 每每到这个时
  • DETR,YOLO模型计算量(FLOPs)参数量(Params)

    前言 关于计算量 FLOPs 参数量 Params 的一个直观理解 便是计算量对应时间复杂度 参数量对应空间复杂度 即计算量要看网络执行时间的长短 参数量要看占用显存的量 计算量 FLOPs FLOP时指浮点运算次数 s是指秒 即每秒浮点运
  • scrapy框架之item pipeline的使用

    转载 https blog csdn net kuangshp128 article details 80321099 一 关于scrapy中pipleline的基本认识 Item Pipeline又称之为管道 顾名思义就是对数据的过滤处理
  • 集线器端口上的电涌:一个USB设备超过其集线器端口的电源限制

    集线器端口上的电涌 一个USB设备超过其集线器端口的电源限制 花了三个小时查阅了大量资料 终于把这个问题大致弄清楚了 差点全盘格式化 主要是因为不认盘的缘故 以为分区表全部损坏 我一开始就怀疑是供电不足 当然以前也碰到过类似的情况 通常重启
  • MySQL数据库查询字符串数据格式之不足自动填充“0”字符以达到指定位数

    MySQL数据库查询字符串数据格式之不足自动填充 0 字符以达到指定位数 在MySQL数据库中 很多时候我们的数据会跟我们想要的输出结果有出入 例如在数据库中 如果我们保存的是1 但是我们需要他输出显示的是001 那就需要我们在数据1的前面
  • 【Linux】调试器:gdb 的基本使用

    文章目录 前序工作 readelf 基本操作 l 显示代码 list r 运行程序 开始调试 run b 打断点 breakpoint info b 查看 断点 information d 删除 断点 delete disable 关闭 断
  • Android 占位式插件化原理实现(三) 如何在插件APP中使用动态广播

    写在前面 前面实现了插件APP的Activity和Service的启动 今天咱来说一下动态广播的使用 还是老套路 使用宿主环境注册和发送 基于宿主Activity注入到插件Activity的Context 一 项目目录 新增文件 宿主APP
  • ai算子是什么_AI当自强:独家揭秘旷视自研人工智能算法平台Brain++

    转载自 机器之心 随着深度学习逐渐从实验室走向工业应用 各大企业都在探索构建算法架构 实现模型的工具和平台 和使用 TensorFlow 或 PyTorch 等开源框架的公司不同 旷视走向了一条自主研制的道路 建立了从算法研发到部署应用的全
  • 深度学习种 数据shuffle对模型性能的影响

    博客部分内容参照链接 https blog csdn net g b l article details 109600536 相同的两个目标检测实验 模型进行shuffle和未进行shuffle时训练的loss图 发现 未经shuffle的