人工智能|机器学习——机器学习如何判断模型训练是否充分

news2024/9/24 1:23:44

一、查看训练日志

训练日志是机器学习中广泛使用的训练诊断工具,每个 epoch 或 iterator 结束后,在训练集和验证集上评估模型,并以折线图的形式显示模型性能和收敛状况。训练期间查看模型的训练日志可用于判断模型训练时的问题,例如欠拟合或过拟合,以及训练和验证数据集是否合适等问题,为后续模型调优的参数设置提供了基础。 SuperMap 使用 tensorboard 记录训练时的日志,如需查看训练日志,可在系统命令行窗口输入:

tensorboard --logdir={日志路径}
如:
tensorboard --logdir=/home/city_grid/log/2020-12-04/image_classification

执行后,浏览器中访问 http://localhost:6006/,效果如图所示:

在这里插入图片描述

【注】使用 tensorboard 之前要保证命令行环境中 SuperMap iObjects Python Env(conda)可用,需配置 conda 到环境变量中,如windows:

E:\ProgramData\conda
E:\ProgramData\conda\Scripts
E:\ProgramData\conda\Library\bin
【注】需更改为本机路径

二、根据训练日志和指标得到较优模型

训练日志中的 y 轴经常为不同的评估指标,用以表示模型的性能,常用的有 loss、 Accuracy、IoU和mAP等。IoU是二元分类、地物分类等问题常用的评价指标,而mAP常用于评估目标检测模型的效果。在实际应用中,我们通常结合多种评估指标来综合评价模型的性能。


模型性能评估可以在训练数据集上进行,以了解模型的“学习”情况;也可以在验证集上进行,以了解模型的“泛化”能力。因此我们需要同时关注模型在训练集和验证集上的表现。

2.1 欠拟合

欠拟合表明模型没有充分学习训练数据集的特征,表明训练过程过早停止且该模型如进一步训练其性能可得到提升。在训练日志上(以 loss 为例),欠拟合一般有两种典型表现。它可能会显示一条趋于水平或维持相对较高 loss 值的水平曲线(如下图所示),表明模型无法学习训练集中足够的信息。这个时候可以考虑增加模型的复杂程度,通过增加隐藏层的数量来提升模型的学习能力

在这里插入图片描述

欠拟合状况也可通过训练结束时 loss 仍持续减少来识别。从下图可以看出,在训练结束时(epoch=9)模型在测试集上的 loss 持续下降并仍有下降的余地;而模型在验证集上的 loss 仍有较大波动,说明模型没有收敛。这时可增大 epoch 数量直到模型性能不再提升(可添加早停策略);如果需要很长时间才能达到验证集曲线上的最小值,可适当提高学习率加快梯度下降速度。


在这里插入图片描述2.2 过拟合

过拟合是指模型对训练数据集学习得“过”好,甚至学习到了训练集中的噪声或随机的错误信息。过拟合的问题在于模型对训练集上有较好的效果,但对新数据的泛化能力较差。这种泛化误差的增加可以通过模型在验证集上的性能来衡量。以 IoU 为例,过拟合情况在训练日志上可表示为训练集上 IoU 随着经验的增加而继续增加,同时验证集的 IoU 上升到一个点并开始再次降低,这个拐点可能是训练停止的点,因为该点之后的模型为过拟合状态。如下图所示,可以看到在训练集上模型性能逐步上升;而在验证集上,模型的精度在 30 个 epoch 之后就开始下降,模型开始出现过拟合。

在这里插入图片描述

如果过早过拟合并具有尖锐倒“U”形,除数据自身问题外还可能是由于学习率过大,可根据模型学习的速度适当调小学习率,并观察验证集上的拐点找到合适的 epoch大小。

2.3 模型收敛

模型收敛是训练的目标,以 loss 作为评价指标为例,模型收敛的训练日志情况应该是训练集上 loss 下降到稳定点,验证集上 loss 下降到稳定点,且两者的泛化差距很小(在理想情况下几乎为零)。泛化差距是指模型在训练集和验证集上表现的差距,是由于训练集和验证集的数据差异导致的。如下图所示,可以看到模型在训练集和验证集上的 loss 趋于稳定且波动较小,并且两者差异不大,模型达到收敛状态。


在这里插入图片描述

2.4 数据集的选择

训练日志还可用于诊断数据集选择是否合适(是否具有代表性)。不具有代表性的数据集是指该数据集无法概括样本中所有的特征信息。在训练和验证数据集之间,如果数据集中的样本数量相对于另一个数据集太少,就会发生这种情况。假设某项目需要同时识别影像中山地中稀疏的平房和市中心密集分布的高楼,如果训练集只包含了密集房屋的标签,就会使训练数据的信息不够全面,训练出的模型可能会对稀疏房屋没有很好的预测效果。这种情况可扩增对应数据集的样本,扩充时要尽量保证验证集和测试集的样本类别分布相似且较为均衡,以达到更好的训练效果。


数据集选择不佳在日志上可能表现为训练集的 loss 下降的很好,而验证集上的 loss波动较大且没有改进(如下图所示)。另一种表现形式可参考模型欠拟合的第一种情况,可能是由于训练数据正负样本之间区别不够明显或正样本特征不够突出造成的

在这里插入图片描述

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

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

相关文章

IOC DI入门

1.加上Component,控制翻转,将service和dao都交给IOC容器管理,成为IOC容器中的bean。用哪个类就在哪个类上面加component。 2.加上autowired。依赖注入。controller依赖于service,service依赖于dao。加上时,IOC容器会提…

Taro3+Vue3重构Mpvue小程序项目踩坑记

1、Taro小程序编译时报错; 原因:页面中存在小程序识别不了的标签;如div解决方法: 将div标签替换成小程序可识别的标签; 安装Taro中提供的插件:tarojs/plugin-html, 使其可被识别; 插件安装教程参考Taro官网&#xff1…

Matlab 点云曲率计算(之二)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 之前已经讨论过许多关于计算曲率的问题,这里使用一个通过拟合三次曲面方程的方式来计算曲率,计算过程如下图所示: 二、实现代码 %********

springboot+bootstarp+jsp房屋租赁系统ssm_t65a9

小型房屋租赁系统主要有管理员、房东和租户三个功能模块。以下将对这三个功能的作用进行详情的剖析。 管理员模块:管理员是系统中的核心用户,管理员登录后,可以对后台系统进行管理。主要功能有个人中心、房东管理、租户管理、房源城市管理、房…

数据库应用:MongoDB 库与集合管理

目录 一、理论 1.MongoDB用户管理 2.MogoDB库管理 3.MogoDB集合管理 二、实验 1.MongoDB用户管理 2.MogoDB库管理 3.MogoDB集合管理 三、问题 1.不显示新创建的数据库 2.插入数据报错 3.删除指定数据库报错 一、理论 1.MongoDB用户管理 (1) 内置角色 数据库用户…

什么是高级语言、机器语言、汇编语言?什么是编译和解释?

1、高级语言 计算机程序是一种让计算机执行特定任务的方法。程序是由程序员用一种称为编程语言的特殊语言编写的。编程语言有很多种,例如 C、C、Java、Python 等。这些语言被称为高级语言,因为它们更接近人类的自然语言,而不是计算机能够直接…

【LeetCode刷题】--38.外观数列

38.外观数列 方法:遍历生成 该题本质上是依次统计字符串中连续相同字符的个数 例如字符串 1112234445666我们依次统计连续相同字符的个数为: 3 个连续的字符 1, 222 个连续的 2,1 个连续的字符 3,3个连续的字符 4,1个连续的字符…

创建一个带有背景图层和前景图层的渲染窗口

开发环境: Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example demo解决问题: 创建一个带有背景图层和前景图层的渲染窗口,知识点:1. 画布转image;2. 渲染图层设置;3.…

如何高效批量生成条形码?

条形码作为商品、库存和信息管理的基础工具,扮演着至关重要的角色。为了满足用户对于高效、专业、多样化的条形码生成需求,我们推出了一款专业高效的在线条形码生成工具。 网址:https://www.1txm.com/ 多样化条形码支持 易条形支持多种常见…

Django请求生命周期流程

浏览器发起请求。 先经过网关接口,Django自带的是wsgiref,请求来的时候解析封装,响应走的时候打包处理,这个wsgiref模块本身能够支持的并发量很少,最多1000左右,上线之后会换成uwsgi,并且还会加…

Redis 主库挂了,如何不间断服务?

目录 1、哨兵机制的基本流程 2、主观下线和客观下线 3、如何选定新的主库? 总结 // 你只管前行,剩下的交给时间 在 reids 主从库集群模式下,如果从库发生故障了,客户端可以继续向主库或其他从库发送请求,进行相关的…

宠物网站的技术 SEO:完整指南

您是宠物行业网站的从业者吗?那么您一定知道,当人们寻找与宠物相关的资源时,在搜索引擎结果中排名靠前有多么重要。 这就是技术SEO的用武之地!它正在调整您网站的后端代码和服务器配置,以在 SERP 中排名更高。 在此&…

PCF8591多通道数据读取异常问题

问题描述 PCF8591在循环读取两个通道时,两个通道数据出现交错问题。 例如我们想实现:第一次读取通道一、第二次读取通道二、第三次读取通道一、第四次读取通道二……依次循环 但实际数据:第一次读取的值为0x80、第二次读取的值为通道一的值、…

西南科技大学C++程序设计实验二(类与对象一)

C++最大的特点就是面向对象,掌握它的几种基本性质还是好理解的,可以看我C++专栏的期末速成,希望对你们学习C++有帮助。 一、实验目的 1.理解简单类的定义、说明与使用 2.理解类中不同属性数据成员的访问特点 3.理解构造函数、析构函数的作用 重点:掌握类的定义与实现,…

java多线程-扩展知识一:进程线程、并发并行、同步异步

1、进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程…

前端入门(三)Vue组件化编程、脚手架、插槽插件、存储、vuex、组件事件、动画、代理

文章目录 Vue 组件化编程 - .vue文件非单文件组件组件的注意点组件嵌套Vue实例对象和VueComponent实例对象Js对象原型与原型链Vue与VueComponent的重要内置关系 应用单文件组件构建 Vue脚手架 - vue.cli项目文件结构组件相关高级属性引用名 - ref数据接入 - props混入 - mixin …

轻巧高效的剃须好工具,DOCO黑刃电动剃须刀上手

剃须刀大家都用过,我比较喜欢电动剃须刀,尤其是多刀头的悬浮剃须刀,感觉用起来很方便,剃须效率也很高。最近我在用一款DOCO小蔻的黑刃电动剃须刀,这款剃须刀轻巧易用,而且性价比超高。 相比于同类产品&…

进程和线程的关系

⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:JavaEE 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 进程&线程 1. 什么是进程PCB 2. 什么是…

ABAP算法 模拟退火

模拟退火算法 算法原理及概念本文仅结合实现过程做简述 模拟退火算法是一种解决优化问题的算法。通过模拟固体退火过程中的原子热运动来寻找全局最优解。在求解复杂问题时,模拟退火算法可以跳出局部最优解获取全局最优解。 模拟退火算法包含退火过程和Metropolis算法…

【封装UI组件库系列】封装Button图标组件

封装UI组件库系列第四篇封装Button按钮组件 🌟前言 🌟封装Button组件 1.分析封装组件所需支持的属性与事件 支持的属性: 支持的事件: 2.创建Button组件 🌟封装功能属性 type主题颜色 plain是否朴素 loading等…