【深度学习】模型过拟合的原因以及解决办法

2023-05-16

【深度学习】模型过拟合的原因以及解决办法

  • 1、背景
  • 2、模型拟合
  • 3、简述原因
  • 4、欠拟合解决办法
  • 5、过拟合解决办法

1、背景

所谓模型过拟合现象:
在训练网络模型的时候,会发现模型在训练集上表现很好,但是在测试集上表现一般或者很差。
总结一句话:已知数据预测的很好,但对未知数据预测得很差的现象。

模型过拟合将图片数据的噪声当成特征点学习进去,导致模型的泛化能力很差,
只能在训练集上表现不错,对未知的其它样本预测表现不佳!

我们通过深度学习或者机器学习的根本问题是解决优化和泛化的问题平衡。
优化问题:训练模型以在训练数据上得到最佳性能。
泛化问题:模型在测试集上的取得很好的性能。

简单分析在模型训练过程的初期和后期:
在这里插入图片描述

2、模型拟合

模型拟合分为过拟合和欠拟合以及适度拟合。
下面以表格的形式表示拟合程度的简要判断标准。

训练集准确率测试集准确率得出结论
不好不好欠拟合
不好过拟合
适度拟合

以下是欠拟合、适度拟合、过拟合的抽象数学表达以及形象展示拟合的程度。
在这里插入图片描述
在这里插入图片描述
第1组模型欠拟合:模型复杂度过低,抽象出的数学公式过于简单,有很多错分的数据,不能很好的你和我们的训练集。
第2组模型拟合适度:虽然有个别错误数据点,但是预测新数据效果很好。
第3组模型过拟合:模型复杂度过高,抽象出的数学公式非常复杂,很完美的拟合训练集的每个数据,但过度强调拟合原始数据。预测新数据时它的表现性很差。

3、简述原因

欠拟合:
训练的特征量过少。
模型复杂度过低,网络模型过于简单。
训练数据集非常不健康,存在大量的错误标注。

过拟合:
样本数量太少,样本数据不足以代表预定的分类规则。
样本噪音干扰过大,将大部分噪音认为是特征从而扰乱了预设的分类规则。

4、欠拟合解决办法

对于欠拟合:总结一句话是模型简单的,样本数据量不够。

  • 扩充样本数据,则增加更多的样本数据特征,使输入数据具有更强的表达能力。
  • 增加模型复杂度:更换更复杂的网络模型,或者网络模型取消掉原有的正则化参数,正则化的目的是用来防止过拟合的,但是模型出现了欠拟合,则需要减少正则化参数,不过这种方法一般不用,通常是更换更复杂的网络。
  • 增加模型训练的迭代次数,模型训练迭代次数太少,训练的数据特征未充分学习。
  • 手动调整参数和超参数。

5、过拟合解决办法

对于过拟合:发生过拟合最常见的现象就是数据量太少而模型太复杂。
训练集的数量级和模型的复杂度不匹配,大致思路是训练集的数量级要小于模型的复杂度。

  • 首先增加训练数据数的样本数据量,并检查样本标签的准确性,训练集越多,过拟合的概率越小。
    最好的是人工标注高质量的数据,可以采用一定的数据增强策略,来实现数据集的扩充。
    注意扩充后的图像要手动确认,因为可能会有脏数据,从而会引入一定的噪声,噪声也会影响模型的性能的。

  • 样本噪音干扰过大,需要手动清理掉脏数据,否则模型过分学习了噪音特征,反而忽略了真实的输入输出间的关系

  • 参数太多,模型复杂度过高,将模型更换为更简单的网络模型,或者正则化L1和L2。 L1是模型各个参数的绝对值之和。L2是模型各个参数的平方和的开方值。
    使用正则化约束:损失函数后面添加正则化项,可以避免训练出来的参数过大从而使模型过拟合。使用正则化缓解过拟合的手段广泛应用,不论是在线性回归还是在神经网络的梯度下降计算过程中,都应用到了正则化的方法。常用的正则化有l1正则和l2正则。

  • 使用Dropout,即按一定的比例去除隐藏层的神经单元,使神经网络的结构简单化。torch.nn.Dropout(0.6),这里的0.6是神经元不保留的概率。

  • 使用BN:Batch Normalization批归一化处理层,作用非常大。使得每一层的数据分布不变,做归一化处理,加快了模型的收敛速度,避免梯度消失、提高准确率。

  • 保证训练数据的分布和测试数据的分布要保持一致,否则模型学习识鸟,你用它识别鸡蛋。

  • 不要过度训练,提前结束训练early-stopping:训练时间足够长,模型就会把一些噪声隐含的规律学习到,这个时候降低模型的性能是显而易见的。所以建议在模型迭代训练时候记录训练精度(或损失)和验证精度(或损失),如果模型训练的效果不再提高,比如训练误差一直在降低但是验证误差却不再降低甚至上升,这时候便可以结束模型训练了。

  • 手动调整参数和超参数。

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

【深度学习】模型过拟合的原因以及解决办法 的相关文章

  • Ubuntu获取最高权限(su)的方式

    sudo i span class hljs preprocessor 输入当前账户密码 span span class hljs preprocessor 进入su模式 xff08 root权限 xff09 span
  • 头文件被重复包含的危害及解决办法

    头文件被重复包含的危害 1 简单的理解 xff1a 无非就是头文件里有一行 int a 61 1 包含两次就变成了 int a 61 1 int a 61 1 于是变量重复定义 xff0c 报错 类 xff0c 函数同理 而当你写成 ifn
  • acrobat进行OCR文字识别失败

    OCR文字识别失败是因为pdf有一页图片过于华丽 xff0c 无法识别 xff0c 在adobe acrobat报错的时候 xff0c 瞅准这一页的页码 xff0c 然后跳过这一页 xff0c 继续文字识别其他页就可以了 黑底白字识别也会失

随机推荐

  • STL基础篇(适合初学者快速入门)

    1 STL 是什么 作为一个C 43 43 程序设计者 xff0c STL 是一种不可忽视的技术 Standard Template Library STL xff1a 标准模板库 更准确的说是 C 43 43 程序设计语言标准模板库 ST
  • golang 错误处理

    一 defer package main import 34 fmt 34 34 os 34 34 bufio 34 func tryDefer for i 61 0 i lt 100 i 43 43 defer fmt Println i
  • 平台式惯性导航系统简介(持续更新ing)

    惯性导航系统是利用惯性敏感器件 xff0c 通过基准方向 初始位置等信息来确定运载体位置 姿态和速度的自主式航位推算系统 平台式惯性导航系统是与捷联式惯性导航系统相对应的一种导航方式 目录 前言 一 前备知识 1 惯性导航常用坐标系 2 哥
  • C++ 标准模板库(STL)_iterator—— Traits(侯捷老师)

    iterator Traits Traits1 产生背景2 定义2 1 iterator traits中定义的class iterators2 1 iterator traits中定义的non class iterators 3 内嵌类型声
  • C++ 标准模板库(STL)_序列式容器——Vector以及扩容操作(侯捷老师)

    STL Vector容器 Vector1 定义2 数据结构3 vector成倍扩容过程及部分源码3 1 扩容条件3 2 扩容步骤 xff08 3步 xff09 3 3 扩容操作部分源码 insert aux push back 43 ins
  • C++ 标准模板库(STL)_序列式容器—— deque(模拟连续空间)(侯捷老师)

    STL deque 双端队列 deque1 定义2 特点3 deque节点结构 数据组织形式 xff09 4 deque数据结构部分源码定义5 初始化map部分源码6 deque iterator 源码定义6 1 迭代器失效问题 7 pus
  • 常见数据结构——完全二叉树(定义、特征、节点个数的判断以及C++简单实现)

    完全二叉树 完全二叉树1 定义2 特征3 C 43 43 简单实现完全二叉树的节点个数 完全二叉树 1 定义 完全二叉树是由满二叉树而引出来的 xff0c 若设二叉树的深度为h xff0c 除第 h 层外 xff0c 其它各层 1 xff5
  • 什么是状态机(Finite-state machine)?

    有限状态机 有限状态机 FSM 1 什么是 状态 2 什么是状态机 xff1f 3 状态机图怎么画 xff1f 参考 有限状态机 FSM 1 什么是 状态 先来解释什么是 状态 xff08 State xff09 现实事物是有不同状态的 x
  • C++实现生产者和消费者模型

    C 43 43 实现生产者和消费者模型 C 43 43 实现生产者和消费者模型1 实现细节2 单生产者 单消费者模型3 单生产者 多消费者模型4 多生产者 单消费者模型5 多生产者 多消费者模型 参考 C 43 43 实现生产者和消费者模型
  • 计算机网络——网络字节序(大端字节序(Big Endian)\小端字节序(Little Endian))

    网络字节序 网络字节序1 网络字节序 Network Byte Order 和本机转换2 字节序转换函数 网络字节序 1 网络字节序 Network Byte Order 和本机转换 1 大端 小端字节序 大端 和 小端 表示多字节值的哪一
  • Android:OkHttp的理解和使用

    OkHttp的理解和使用 OkHttp1 什么是OkHttp2 OkHttp的作用3 Okhttp的基本使用3 1 Http请求和响应的组成3 2 OkHttp请求和响应的组成3 3 GET请求同步方法3 4 GET请求异步方法3 5 po
  • 岛屿之灵攻略笔记

    游戏自定义所在地图名字 xff0c 我的名字是Academics 移动 按下Shift可以跑步 xff0c 再按shift切换回走路 困意满的话 xff0c 跑步和骑自行车都不行 Basic Stove分析 图标 需要 Cooking等级
  • Android : 编写精美的聊天界面

    Android 编写精美的聊天界面 1 准备工作2 编写精美的聊天界面参考 1 准备工作 首先制作一张 9 格式的聊天气泡 xff1b 需要注意的是 xff0c 制作完成后 xff0c 应该将原始文件删除 xff0c 否则AS会分不清楚而报
  • Android:ThreadLocal的简单理解和使用

    ThreadLocal的简单理解和使用 1 背景1 1 背景及问题1 2 每个线程需要一个独享的对象1 2 每个线程需要一个独享的对象 2 ThreadLocal原理2 1 使用说明2 2 ThreadLocal的set方法2 3 Thre
  • Android:IdleHandler的简单理解和使用

    IdleHandler的简单理解和使用 1 IdleHandler 是什么2 IdleHandler 使用方式2 1 添加和删除2 2 执行 3 常见问题和使用场景3 1 使用场景3 2 常见问题 参考 1 IdleHandler 是什么
  • Android:LeakCanary原理的简单理解和使用

    LeakCanary原理的简单理解和使用 1 背景2 LeakCanary2 1 LeakCanary 工作原理2 1 1 检测未被 GC 回收的对象2 1 2 转储堆2 1 3 分析堆2 1 4 对泄漏进行分类 2 2 LeakCanar
  • 【opencv-c++】cv::filter2D图像卷积操作

    opencv c cv filter2D图像卷积操作 1 背景 2 示例 1 背景 图像卷积的示意图如下 以上操作描述为 一个窗口区域在另外一个大的图像上移动 对每个窗口覆盖的区域都进行点乘得到的值作为中心像素点的输出值 窗口的移动顺序是是
  • 【opencv-c++】cv::GaussianBlur高斯滤波

    opencv c cv GaussianBlur高斯滤波 1 背景 2 示例 1 背景 高斯滤波首先要知道高斯函数 在图像采集的过程中 经常会有噪声出现 这些噪声满足高斯分布 我们简称为高斯噪声 对于高斯噪声 我们采用高斯滤波来去噪 高斯滤
  • 【opencv-c++】cv::bilateralFilter双边滤波

    opencv c cv bilateralFilter双边滤波 1 背景 2 示例 1 背景 由于高斯滤波去降噪 会较明显地模糊边缘 对于高频细节的保护效果并不明显 而双边滤波 Bilateral filter 是一种非线性的滤波方法 是结
  • 【深度学习】模型过拟合的原因以及解决办法

    深度学习 模型过拟合的原因以及解决办法 1 背景2 模型拟合3 简述原因4 欠拟合解决办法5 过拟合解决办法 1 背景 所谓模型过拟合现象 xff1a 在训练网络模型的时候 xff0c 会发现模型在训练集上表现很好 xff0c 但是在测试集