数据集中valid的作用

简单来说,valid(或 val)文件夹的存在是为了在模型训练过程中,定期、独立地评估模型的性能,以便进行模型调优、防止过拟合和选择最佳模型。它是机器学习工作流中至关重要的一环。

一般的数据集结构:

image

1. Train(训练集)

  • 目的:这是模型“学习”所用的主要数据。模型通过反复查看这些图片和对应的标签,来调整其内部的权重和参数,学习如何从图片中识别出目标(比如,猫、狗、汽车等)。

  • 类比:就像学生的教科书和课堂练习。学生通过反复学习和做书后习题来掌握知识点。

2. Valid / Val(验证集)

这是你问题的核心。它的作用非常关键:

  • 目的1:实时评估训练效果:在训练过程中,每训练完一定的轮数(epoch),程序就会自动拿当前的模型去验证集上跑一遍,计算准确率、召回率、mAP等指标。这样你就能看到模型在“未见过的”数据上表现如何。

  • 目的2:防止过拟合(Overfitting):如果模型只在训练集上表现越来越好,而在验证集上表现开始变差,这就意味着模型可能“过拟合”了。它只是死记硬背了训练集中的噪声和细节,而没有学到通用的特征。验证集是发现过拟合的“警报器”。

  • 目的3:超参数调优:你可以根据验证集的表现来调整模型的超参数(如学习率、批大小等),从而找到一组最优的参数配置。

  • 目的4:选择最佳模型:训练通常会保存多个时间点的模型权重(best.ptlast.pt)。那个在验证集上表现最好的模型(best.pt)通常会被认为是最终的最佳模型。

  • 类比:就像学校的月考/模拟考。它的目的不是打分排名,而是为了检查学生一段时间的学习效果,发现知识薄弱点,以便老师和学生及时调整接下来的教学和学习计划。题目是新的,但考试范围是学过的。

3. Test(测试集)

  • 目的:这是对模型的最终考核。它只在整个训练过程完全结束后使用一次。你用挑选出来的最佳模型(基于验证集性能选出的)在测试集上运行,得到的性能指标(如mAP)才被认为是模型真正的、 unbiased(无偏) 的泛化能力指标。

  • 关键要求:测试集在训练和调参过程中必须完全被隔离,绝对不能以任何形式被模型“看到”或用于调整参数。否则,测试结果就会变得乐观而不真实。

  • 类比:就像最终的高考。学生不能提前知道考题,考完也不能再回去复习了。这次考试的成绩决定了最终能上什么大学。

 

为什么需要三者分离?

想象一下如果只有训练集和测试集:
你训练模型后,直接去测试集上测试,发现成绩不好。于是你回去调整模型参数,再来测试集上看结果……如此反复,你的模型实际上已经在不知不觉中针对测试集进行了优化(“作弊”了)。这个模型在测试集上可能表现很好,但拿到真实世界中面对全新的数据时,性能可能会大幅下降。

验证集的存在就打破了这种循环,它提供了一个独立的、用于开发和调试模型的基准。

 

总结对比

 
 
数据集 英文 作用 类比
训练集 Training Set 用于模型学习,调整模型参数 教科书和课堂练习
验证集 Validation/Valid Set 用于模型开发,调超参、防过拟合、选模型 月考和模拟考
测试集 Test Set 用于最终评估,报告模型的真实泛化能力 最终高考

 

那我们如何开始训练呢?

第一步:组织数据目录

确保你的数据按照如下结构摆放。假设你的项目根目录是 yolov11_project/

image

最佳实践

  • 使用相对路径而不是绝对路径,这样你的代码更容易移植。

  • trainvaltest 文件夹下的 images 和 labels 中的文件必须一一对应(除了扩展名)。例如:

    • train/images/0001.jpg -> train/labels/0001.txt

    • valid/images/0002.jpg -> valid/labels/0002.txt

 

第二步:创建数据集配置文件

这是最重要的一步。你需要在项目的某个位置(例如在 yolov11_project/ 下)创建一个 .yaml 文件(例如 data/my_custom_dataset.yaml)。

文件内容如下:

# 数据集的路径(相对于启动训练命令的位置)
path: ../datasets/my_custom_dataset  # 数据集根目录
train: train/images  # 训练集路径,相对于 'path'
val: valid/images    # 验证集路径,相对于 'path'
test: test/images    # 【可选】测试集路径,相对于 'path'# 类别数量
nc: 3  # 替换为你的数据集中目标类别的数量(例如:人、车、交通灯则 nc=3)# 类别名称列表
names: 0: person    # 类别0的名称1: car       # 类别1的名称2: traffic_light # 类别2的名称# ... 根据你的nc数量继续添加

第三步:启动训练

在命令行中,进入你的YOLO代码目录(yolov11/),然后运行训练命令。

# 切换到YOLO代码目录
cd yolov11_project/yolov11# 开始训练
python train.py \--data ../data/my_custom_dataset.yaml \--weights yolov11s.pt \--epochs 100 \--img 640

训练过程中会发生什么

  • 程序会读取 train 文件夹的数据进行模型权重更新。

  • 每个epoch结束后,程序会自动在 valid 文件夹的数据上验证性能,并计算mAP等指标。

  • 训练日志和模型权重会保存在 runs/train/exp/ 目录(每次训练会新建一个 expN 文件夹)。

  • 训练结束后,最佳模型会保存为 runs/train/exp/weights/best.pt

第四步:进行最终测试(可选但强烈推荐)

训练完成后,你应该用从未参与过训练和调参的 test 集来评估最佳模型的真实性能。

python val.py \--data ../data/my_custom_dataset.yaml \--weights runs/train/exp/weights/best.pt \--task test # 明确指定任务为测试
  • --weights runs/train/exp/weights/best.pt: 指定你要测试的模型权重(上一步得到的最佳模型)。

  • --task test: 告诉程序使用数据集配置文件里 test 路径下的数据。如果不加这个参数,默认会使用 val 集。

运行后,程序会输出模型在测试集上的详细指标(mAP, precision, recall等),这才是对你模型泛化能力的最终评价。

总结

  1. 摆好数据:按标准结构放置 trainvalidtest

  2. 写配置文件:创建 .yaml 文件,正确指定路径和类别信息。

  3. 开始训练:使用 train.py 并通过 --data 参数引用你的配置文件。模型会在 train 上学习,在 valid 上验证。

  4. 最终测试:使用 val.py 并指定 --task test,在 test 集上评估 best.pt 模型。

遵循这个流程,你就能科学、正确地利用好数据集中的每一个部分。

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

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

相关文章

深入 RocketMQ 核心源码:从环境搭建到高可用设计的全方位解析

深入 RocketMQ 核心源码:从环境搭建到高可用设计的全方位解析 在分布式系统中,消息队列是实现异步通信、解耦服务与削峰填谷的关键组件,而 RocketMQ 凭借其高吞吐、低延迟与高可用的特性,成为众多企业的首选。本文将从源码角度出发,带大家一步步揭开 RocketMQ 的神秘面纱,…

从零到顶会:NLP科研实战手册 - 实践

从零到顶会:NLP科研实战手册 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important;…

肝不好能喝酒吗

一般肝脏不好的患者不建议喝酒,可能会加重不适症状,影响健康。 肝脏是人体的重要器官,负责处理和代谢许多物质。如果肝脏不健康或受损,饮酒可能会产生负面影响,并导致一系列不适症状,甚至加重肝脏疾病。因此肝脏不好的人群不建议饮酒,以免对身体健康造成不良影响。 酒精…

ROS中如何将日志格式设置为行号的形式

export RCUTILS CONSOLE OUTPUT FORMAT=[{function name}:{line_number}]:{message}

USB相关的sysfs文件(重要的)【转】

https://www.cnblogs.com/linhaostudy/p/18388902 阅读目录前言 目录内容详解常见的 USB 相关目录及其含义1. /sys/bus/usb 目录下的含义1.1 /sys/bus/usb/devices/usb11-0:1.0 1-1.1:1.0结构图 设备信息bDeviceClass version busnum & devnum dev bMaxPower idVendor &…

25上第一周

《数学之美》第三章以“语言模型与中文信息处理”为核心,通过讲述统计语言模型如何破解中文分词、语音识别等难题,展示了数学在解决复杂问题时的优雅与力量。作者用“马尔可夫链”将看似无序的汉字序列转化为可计算的概率问题,这种化繁为简的思维令我得到了许多感悟。尤其当…

深入解析:RxJava在Android中的应用

深入解析:RxJava在Android中的应用pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; …

模型选择与配置说明

模型选择与配置说明(Detection / Recognition / Classification) 本文系统说明本项目在“检测(det)/识别(rec)/分类(cls)”三条子任务上的模型选择思路、备选方案对比、输入尺寸与性能取舍、部署格式(ONNX/MNN)、以及在 GUI 与代码层面的配置方式。目标是让读者理解“…

002_文本分类任务的问答

1、下面代码中,random_state作为随机种子作用是什么? train_x, valid_x, train_y, valid_y = model_selection.train_test_split(trainDF[text], trainDF[label], test_size=0.25, random_state=42)这段代码的作用是随机把数据分为两个部分 计算机的“随机数”其实是 伪随机数…

车牌识别

车牌识别方案对比与实现总结(GUI 三方法:lock / test / rec2) 本文面向实际工程应用,系统梳理当前 GUI 集成的三种车牌识别方法(lock、test、rec2)的技术亮点、设计思路、模型选择、实现过程与关键代码,帮助快速理解与持续优化。目标是:在统一界面中,对比“传统候选+文…

告别人工标注瓶颈!Reward-RAG:用 CriticGPT 打造更懂人类偏好的检索模型

Reward-RAG: Enhancing RAG with Reward Driven Supervision 全文摘要 本文介绍了一种名为Reward-RAG的新方法,旨在通过奖励驱动监督增强Retrieval-Augmented Generation(RAG)模型。与以往的RAG方法不同,该方法使用了CriticGPT训练了一个专门的奖励模型,并利用该模型生成合…

Latex 中百分号怎么打

Latex 中百分号怎么打 由于 % 被用作注释符,所以前面 + \ 进行转义 \(\frac{285.5}{1-2.7\%}\)

文件上传-条件竞争绕过

条件竞争原理: 条件竞争的逻辑是代码逻辑问题:当我们文件上传到服务器时,先对文件进行保存,然后对文件的后缀名进行判断,符合白名单的保存,不符合就删除,但在删除之前,有另一个对服务器发起的请求,要访问这个文件,那么就可能造成文件被读取和访问。这就是条件竞争。 …

9.17 CSP-S模拟23/多校A层冲刺NOIP2024模拟赛19 改题记录

HZOJ 写在前面 连着三天吃三坨。本来想着今天大凶忌参加模拟赛然后没模拟赛挺好的,然后7:57临时通知加场,难道这就是大凶?好吧打就打吧,没想到真差点爆零。粗看没一道题可做怀疑自己的水平了然后赛后猛然醒悟是自己蠢如猪。其实这篇前面应该还有两篇,但是奈何这套改完得比…

Java基本语法

Java基本语法Day04 今天内容大部分在复习运算符的内容和分支语句练习题 复习运算符: 运算符:+ - + - * / % (前)++ (后)++ (前)-- (后)-- + 算术运算符: 【特别说明的】 1.//(前)++ :先自增1,后运算 //(后)++ :先运算,后自增1 2.//(前)-- :先自减1,后运算 //(后)-- :先运算,…

在AI技术快速实现创想的时代,挖掘前端学习新需求成为关键——某知名编程教育平台需求洞察

本文分析了一个包含50个前端项目的编程学习资源,涵盖交互设计、动画效果和实用工具等多种类型,通过用户反馈发现了界面优化、功能扩展和教学改进等方面的潜在需求。a.内容描述 该项目是一个包含50个独立前端项目的编程学习资源,核心功能定位在于通过实际项目练习帮助开发者掌…

IvorySQL 与 deepin 完成兼容性认证,共创开源生态新篇章

近日,IvorySQL 与 deepin 操作系统成功完成了兼容性适配认证。这一里程碑式的成就标志着 IvorySQL 在国产操作系统生态中的进一步深化,为用户提供更稳定、高效的数据库解决方案。deepin 简介 深度操作系统 deepin 是一款以“简洁、美观、易用”著称的国产 Linux 发行版,拥有…

在 Nginx 上搭建静态站点

1、新建站点的配置文件 vi /etc/nginx/conf.d/www.xxx.com.conf2、写入如下内容: server {listen 80;#listen [::]:80;server_name www.xxx.com; # 这里可以写你的域名,或者 _ 表示匹配所有 root /var/www/www.xxx.com; # 你的静态文件目录 index index.html index.htm;locat…

kylin SP3安装mysql 8.4.5

环境:OS:kylin SP3mysql:8.4.5 glibc2.17,建议安装glibc.2.28版本 查看系统glibc版本[root@localhost ~]# ldd --versionldd (GNU libc) 2.28Copyright (C) 2018 自由软件基金会。这是一个自由软件;请见源代码的授权条款。本软件不含任何没有担保;甚至不保证适销性或者适合某…

Unity中是否可以禁用GC

1)Unity中可以禁用GC吗2)项目是URP管线,渲染模块CPU耗时高,经排查主要是Batches数过高,应怎样进一步排查和优化渲染批次这是第445篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。 UWA社区主页:co…