当前位置: 首页 > article >正文

K-fold交叉验证后如何确认最终模型权重

问题背景

  1. 我在一份数据集上训练yolov10,数据集被我随机划分成了train、val、test数据集,它们的比例是8:1:1
  2. 多次随机划分数据集并多次重复训练yolov10后,我将得到多份yolov10的best.pt权重,这几份best.pt在test集上的测试结果相差甚远
  3. 初步分析原因:数据集中有的数据比较简单,有的数据比较复杂,随机划分数据集的时候,恰好把复杂数据或简单数据划分到test集上,从而导致上述问题

1. 解决问题的思路

要解决这个问题,我快速联想到了K-Fold Cross Validation(后续简称cv),因为cv给我的直观记忆感受就是能让大部分的数据进入到训练当中。关于cv,我们常见的概念图如下,图片来自B站up主:小萌Annie
在这里插入图片描述

1.1. 衍生问题

  1. 问题1,根据上图所描述来看,test集是不动的,这仍然无法解决我遇到的问题,即随机划分数据集的时候,恰好把复杂数据或简单数据划分到test集上,导致训练的时候在val集上效果不错,但是test集上拉胯,亦或着相反。
  2. 问题2:我在实践yolo交叉验证后,假设我实践时K-fold中的K=5,那么我训练出来了5份best.pt权重文件,最后我应该使用哪一份权重作为我的最终yolov10的权重,并作用test集上做最终测试

2. 重新认识K-Fold Cross Validation

1.cv是用来评估一个模型在一份数据集上性能的工具,它是评估手段,而不是训练手段。换句话说K-Fold Cross Validation仅评估yolov10在某数据集上的性能,而并不决定最终的yolov10模型权重。
2.K-Fold Cross Validation已经完成了对模型性能的评估,test集不需要保留。换句话说,在执行K-Fold Cross Validation的时候,应该把所有的数据都用于K-Fold Cross Validation,不需要单独保留一份test集。
3. 如果有多个模型(yolov10或mobilenet或resnet),那么使用cv完成了模型性能评估后,就可以决定使用哪个模型了。在完成cv后,模型的权重如何决定?使用所有数据重新训练,得到的就是最终权重,因为性能在之前的cv已经评估过了,为了最大化利用数据集,全部数据都用来训练。

3. 参考资料

  1. stack overflow 论坛
  2. 博客
  3. 《统计学习方法》—第2版—李航著,P24页
  4. 《机器学习》—周志华著,P26页

http://www.kler.cn/a/370776.html

相关文章:

  • .Net8 Avalonia跨平台UI框架——<vlc:VideoView>控件播放海康监控、摄像机视频(Windows / Linux)
  • nginx 配置域名前缀访问 react 项目
  • Spring Boot Actuator 详细介绍
  • LLMs之RAG:《EdgeRAG: Online-Indexed RAG for Edge Devices》翻译与解读
  • 【Redis】Redis 集群中节点之间如何通信?
  • 「刘一哥GIS」系列专栏《GRASS GIS零基础入门实验教程(配套案例数据)》专栏上线了
  • 通过异地组网工具+RustDesk实现虚拟局域网使用远程桌面RDP
  • android源码 system目录下 android源码目录结构
  • Microsoft Office PowerPoint制作科研论文用图
  • vue Element U 解决表格数据不更新问题
  • 服务器数据恢复—异常断电导致服务器挂载分区无法访问的数据恢复案例
  • Day3 - Playwright 页面元素
  • Radar Fields: Frequency-Space Neural Scene Representations for FMCW Radar 笔记
  • 一篇文章入门梅尔频率倒谱系数
  • 【HarmonyOS】判断应用是否已安装
  • Spring Boot框架:打造可扩展的论坛网站
  • pycharm 中 json 库的常用操作
  • 基于SpringBoot云养鸡互动平台的设计与实现
  • 嵌入式学习-网络-Day01
  • 二十五、Python基础语法(函数进阶-上)
  • LN 在 LLMs 中的不同位置 有什么区别么
  • go语言中的Scan()和Scanln()输入函数
  • NLTK无法下载?
  • 超好玩又简单-猜数字游戏(有手就行)
  • 关于sse、websocket与流式渲染
  • Spring SPI、Solon SPI 有点儿像(Maven 与 Gradle)