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

深度学习(YOLO、DETR) 十折交叉验证

二:交叉验证

在 K 折验证之前最常用的验证方法就是交叉验证,即把数据划分为训练集、验证集和测试集。一般的划分比例为 7:1:2。但如何合理的抽取样本就成为了使用交叉验证的难点,不同的抽取方法会导致截然不同的训练性能。同时由于验证机和训练集是不参与训练的,导致大量的数据无法应用于学习,所以显而易见的会导致训练的效果下降。

二:K 折交叉验证

将训练集数据划分为 K 部分,利用其中的 K-1 份做为训练,剩余的一份作为测试,最后取平均测试误差做为泛化误差。这样做的好处是,训练集的所有样本都必然会成为训练数据同时页必然有机会成为一次测试集。可以更好的利用训练集数据。

K 越大,平均误差被视为泛化误差这个结果就越可靠,但相应的所花费的时间也是线性增长的。

上图 中 划分测试、训练、验证的时候 平均分成10份   7份训练 1份验证 2份测试 。

按照顺序循环成一个圈  代码如下:

import os
import shutil
import numpy as np#文件地址
postfix = 'jpg'
imgpath = 'D:\\dataset\\images'
txtpath = 'D:\\dataset\\txt'# 创建存储交叉验证结果的基础目录
os.makedirs('cross_validation', exist_ok=True)# 获取文件列表并按文件名排序
listdir = np.array(sorted([i for i in os.listdir(txtpath) if i.endswith('.txt')], key=lambda x: int(x[:-4])))# 将文件列表等分为10份
folds = np.array_split(listdir, 10)# 进行10次交叉验证
for fold in range(10):# 初始化训练、验证、测试集索引train_indices = []val_indices = []test_indices = []# 训练集索引for i in range(7):index = (fold + i) % 10train_indices.extend(folds[index])# 验证集索引val_index = (fold + 7) % 10val_indices.extend(folds[val_index])# 测试集索引test_indices.extend(folds[(fold + 8) % 10])test_indices.extend(folds[(fold + 9) % 10])# 打印每次折的训练集、验证集和测试集的大小print(f'Fold {fold + 1}:')print(f'  Train set size: {len(train_indices)}')print(f'  Validation set size: {len(val_indices)}')print(f'  Test set size: {len(test_indices)}')# 为当前折创建目录fold_dir = f'cross_validation/fold_{fold + 1}'os.makedirs(f'{fold_dir}/images/train', exist_ok=True)os.makedirs(f'{fold_dir}/images/val', exist_ok=True)os.makedirs(f'{fold_dir}/images/test', exist_ok=True)os.makedirs(f'{fold_dir}/labels/train', exist_ok=True)os.makedirs(f'{fold_dir}/labels/val', exist_ok=True)os.makedirs(f'{fold_dir}/labels/test', exist_ok=True)# 将文件复制到当前折的训练、验证和测试目录中for i in train_indices:img_file = f'{imgpath}/{i[:-4]}.jpg'lbl_file = f'{txtpath}/{i}'shutil.copy(img_file, f'{fold_dir}/images/train/{i[:-4]}.jpg')shutil.copy(lbl_file, f'{fold_dir}/labels/train/{i}')for i in val_indices:img_file = f'{imgpath}/{i[:-4]}.jpg'lbl_file = f'{txtpath}/{i}'shutil.copy(img_file, f'{fold_dir}/images/val/{i[:-4]}.jpg')shutil.copy(lbl_file, f'{fold_dir}/labels/val/{i}')for i in test_indices:img_file = f'{imgpath}/{i[:-4]}.jpg'lbl_file = f'{txtpath}/{i}'shutil.copy(img_file, f'{fold_dir}/images/test/{i[:-4]}.jpg')shutil.copy(lbl_file, f'{fold_dir}/labels/test/{i}')

    images和txt文件夹下存放文件,没有任何子文件夹

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 一个简单的Rtmp推流客户端(QT录音,OpenCV摄像,FFmpeg编码推流)
  • 模糊Smith智能控制方法的研究 及其单片机实现
  • 打造聊天流式回复效果:Spring Boot+WebSocket + JS实战
  • Python办公自动化:初识 `openpyxl`
  • Ubuntu离线安装库并解决依赖关系
  • 发信息(c语言)
  • golang提案,内置 Go 错误检查函数
  • 【前端】NodeJS:记账本案例优化(token)
  • leetCode - - - 双指针
  • 解密JVM崩溃(Crash)-学习笔记
  • qt-12工具盒(ToolBox)
  • 数学基础 -- 指数增长与指数衰变
  • 使用Go语言将PDF文件转换为Base64编码
  • Wireshark分析工具
  • 构建艺术:Ruby中RESTful API的精粹实践
  • 10个最佳ES6特性 ES7与ES8的特性
  • 30秒的PHP代码片段(1)数组 - Array
  • 5、React组件事件详解
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • emacs初体验
  • Fastjson的基本使用方法大全
  • JAVA多线程机制解析-volatilesynchronized
  • XForms - 更强大的Form
  • 记一次用 NodeJs 实现模拟登录的思路
  • 排序算法学习笔记
  • 《码出高效》学习笔记与书中错误记录
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • # wps必须要登录激活才能使用吗?
  • ###项目技术发展史
  • #在 README.md 中生成项目目录结构
  • (2)nginx 安装、启停
  • (33)STM32——485实验笔记
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (计算机网络)物理层
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET Core 项目指定SDK版本
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET MVC第五章、模型绑定获取表单数据
  • .net 托管代码与非托管代码
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .NET处理HTTP请求
  • .NET是什么
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • @Transaction注解失效的几种场景(附有示例代码)
  • []我的函数库
  • [Android] Upload package to device fails #2720
  • [Angular 基础] - 数据绑定(databinding)
  • [C++]——带你学习类和对象
  • [COGS 622] [NOIP2011] 玛雅游戏 模拟
  • [DDR5 Jedec 4-1] 预充电命令 Precharge
  • [Django学习]查询过滤器(lookup types)