数据集 train val 划分

672 字
3 分钟
数据集 train val 划分

数据集 train val 划分#

训练集和验证集划分决定了模型评估是否可信。划分不当时,验证指标可能很好看,但真实新数据表现很差。

视觉任务里最常见的坑是相似图片同时出现在 train 和 val,造成数据泄漏。

基本划分#

from sklearn.model_selection import train_test_split
images = sorted(list(Path("images").glob("*.jpg")))
train, val = train_test_split(images, test_size=0.2, random_state=42)
print(len(train), len(val))

random_state 能保证划分可复现。以后重新训练时,不会因为划分变化导致结果无法比较。

按主体划分#

如果同一个物体、同一个视频、同一个场景产生了多张图片,应该按主体或视频划分,而不是按单张图片随机划分。

例如视频抽帧任务里,相邻帧非常相似。如果前一帧在训练集,后一帧在验证集,指标会虚高。

保持类别分布#

类别不平衡时,要检查 train 和 val 中每个类别是否都有样本。少数类如果只出现在训练集,验证指标就看不到它的效果。

划分后检查#

  • 图片和标签是否同步移动。

  • train/val 是否有重名文件交叉。

  • 每个类别在两边的数量。

  • 验证集是否代表真实使用场景。

实战复盘#

检查《数据集 train val 划分》这类视觉流程时,我不会只看命令是否完成,而会打开输出文件。视觉任务的质量判断必须回到图像本身:目标是否还在、颜色是否正常、框是否贴合、类别是否正确。

如果处理结果准备进入训练集,我会额外记录数据版本。图片、标签、划分文件和增强策略要能对应到同一个版本,否则模型结果变化时很难解释。

这类文章最适合持续补充错误案例。每遇到一次读图失败、标注错位或预测异常,都可以回到文章里增加一个真实排查点。

最小验收样例#

验收《数据集 train val 划分》时,我会固定三张图片:一张正常样例、一张边界样例、一张容易失败的样例。每次改代码都用这三张图跑一遍,并保存输出结果。

视觉流程的验收必须能用眼睛确认。只打印数组 shape 或命令成功不够,至少要保存一张中间结果图或最终可视化图,确认处理效果和预期一致。

小结#

数据集划分不是简单随机切一刀。要防止泄漏、保持类别分布,并保证验证集能代表真实问题。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

数据集 train val 划分
https://blog.tjcheng.cn/posts/backfill/2026-06-09/dataset-split-train-val/
作者
TengJinCheng
发布于
2026-06-09
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
TengJinCheng
Hello, I'm Teng.
公告
欢迎来到TengJinCheng工作铺!
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
分类
标签
站点统计
文章
157
分类
7
标签
114
总字数
109,939
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.13.4
文章许可
CC BY-NC-SA 4.0

文章目录