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

一、查看训练日志

训练日志是机器学习中广泛使用的训练诊断工具,每个 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.mzph.cn/news/178937.shtml

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

相关文章

C++ 泛型编程,函数模版和类模版

1.泛型编程 泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础 就比如说活字印刷术,就是提供一个模具,然后根据模具来印刷出不同的字。 泛型编程跟着类似,提供一个模版,根据这…

微服务--05--配置管理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 配置管理这些问题都可以通过统一的配置管理器服务解决。而Nacos不仅仅具备注册中心功能,也具备配置管理的功能: 1.配置共享1.1.添加共享配置…

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

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

API接口测试工具的主要作用及选择指南

API接口测试是现代软件开发中至关重要的一环。为了确保不同组件之间的无缝集成和功能正常运作,API接口测试工具应运而生。本文将介绍API接口测试工具的主要作用,以及在选择适合项目的工具时需要考虑的因素。 1、功能测试:API接口测试工具的首…

Linux内存回收:LRU算法

linux操作系统再内存不足时会使用Swap机制,将一些不经常使用的匿名内存页放到磁盘当中,等下次需要时再读取到内存当中,而这个LRU算法就是用来选择把哪些不常使用的匿名内存页放到磁盘当中的。 LRU(Least Recently Used&#xff09…

python避坑指南(更新中)

os.path.join 避免连续的/,看示例即清楚,最好的避免方法是字符串首末都不要加’/: join用法 用join前面的符号将参数数组里面的字符串连接起来,注意join只有一个参数

电子学会C/C++编程等级考试2021年03月(二级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:石头剪刀布 石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。 一天,小A和小B正好在玩石头剪刀布。已知他们的出拳都是有周期性规律的,比如:“石头-布-石头-剪刀-石头-布-石头…

Linux shell编程学习笔记31:alias 和 unalias 操作 命令别名

目录 0 前言1 定义别名2 查看别名 2.1 查看所有别名2.2 查看某个别名 2.2.1 alias 别名2.2.2 alias | grep 别名字符串2.2.3 使用 CtrlAltE 组合键3 unalias:删除别名4 如何执行命令本身而非别名 4.1 方法1:使用 CtrlAltE 组合键 && unalias4…

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

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

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

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

java基础-IO

1、基础概念 1.1、文件(File) 文件的读写可以说是开发中必不可少的部分,因为系统会存在大量处理设备上的数据,这里的设备指硬盘,内存,键盘录入,网络传输等。当然这里需要考虑的问题不仅仅是实现,还包括同步…

Linux系统编程 day06 进程间通信

进程间通信 1. 进程间通信的概念2. 匿名管道pipe3. 命名管道FIFO4. 内存映射区 1. 进程间通信的概念 在Linux的环境下,进程地址空间是相互独立的,每个进程有着各自不同的用户地址空间。一个进程不能访问另一个进程中的内容,要进行数据交换必…

STM32F103C8T6第7天:

1. 智能小车:让小车动起来(360.64) 硬件接线 B-2A – PB0B-1A – PB1A-1B – PB2A-1A – PB10其余接线参考上官一号小车项目。 cubemx配置 代码(28.smartCar_project1/MDK-ARM) 2. 智能小车:串口控制小…

简要介绍Spring原生框架与Spring是轻量级框架的原因

😉😉 学习交流群: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783…

别再让假的fiddler教程毒害你了,来看这套最全最新的fiddler全工具讲解

fiddler界面工具栏介绍 添加图片注释,不超过 140 字(可选) (1)WinConfig:windows 使用了一种叫做“AppContainer”的隔离技术,使得一些流量无法正常捕获,在 fiddler中点击 WinConfig…

Vue指令之v-html

在Vue中有很多特殊的标签属性,这些属性一般以’v’开头,用于在标签中实现特殊的功能。 例如,当Vue实例的data是一个inner html,我们想在网页上渲染这部分html,如果依然使用之前的{{ variable }},则只会将i…

单片机复位电路

有时候我们的代码会跑飞,这个时候基本上是一切推到重来.”推倒重来”在计算机术语上称为复位.复位需要硬件的支持,复位电路就是在单片机的复位管脚上产生一个信号,俗称复位信号.这个信号需要持续一定的时间,单片机收到该信号之后就会复位,从头执行。 复位原理: 那么…

【视觉SLAM十四讲学习笔记】第三讲——四元数

专栏系列文章如下: 【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍 【视觉SLAM十四讲学习笔记】第二讲——初识SLAM 【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵 【视觉SLAM十四讲学习笔记】第三讲——Eigen库 【视觉SLAM十四讲学习笔记】第三讲——旋转向量和欧…

anaconda换源安装pytorch(附带bug解决办法)

1.安装anaconda 如何安装anaconda可以看这篇文章:如何安装anaconda 2.换源安装pytorch: 首先进入到pytorch官网,选对好参数之后复制命令进入到anaconda prompt即可: 然后进入自己的环境之后输入该命令(即conda install …),则可以进行下载。下载完成…

【DevOps】SonarQube 指标解读

SonarQube 指标解读 1.BUG 评级计算方法(可靠性)2.漏洞评级计算方法(安全性)3.债务和坏味道4.覆盖率4.1 代码覆盖率4.2 分支覆盖率4.3 单元测试覆盖率 5.重复 1.BUG 评级计算方法(可靠性) ✅ A&#xff1a…