import os
import random
from shutil import copy2def data_set_split(src_data_folder, target_data_folder, slice_data = [0.4,0.3,0.3]):'''读取源数据文件夹,生成划分好的文件夹,分为trian、val、test三个文件夹进行:param src_data_folder: r"D:\Desktop\segmentation_2021\data":param target_data_folder: 目标文件夹 r"D:\Desktop\segmentation_2021\a":param slice_data: 划分数据比例比例  训练 验证 测试所占百分比:return:'''print("开始数据集划分")class_names = os.listdir(src_data_folder)# 在目标目录下创建文件夹split_names = ['train', 'val', 'test']for split_name in split_names:split_path = os.path.join(target_data_folder, split_name)if os.path.isdir(split_path):passelse:os.mkdir(split_path)# 然后在split_path的目录下创建类别文件夹for class_name in class_names:class_split_path = os.path.join(split_path, class_name)if os.path.isdir(class_split_path):passelse:os.mkdir(class_split_path)# 按照比例划分数据集,并进行数据图片的复制# 首先进行分类遍历for class_name in class_names:current_class_data_path = os.path.join(src_data_folder, class_name)current_all_data = os.listdir(current_class_data_path)current_data_length = len(current_all_data)current_data_index_list = list(range(current_data_length))random.shuffle(current_data_index_list)train_folder = os.path.join(os.path.join(target_data_folder, 'train'), class_name)val_folder = os.path.join(os.path.join(target_data_folder, 'val'), class_name)test_folder = os.path.join(os.path.join(target_data_folder, 'test'), class_name)train_stop_flag = current_data_length * slice_data[0]val_stop_flag = current_data_length * (slice_data[0] + slice_data[1])current_idx = 0train_num = 0val_num = 0test_num = 0for i in current_data_index_list:src_img_path = os.path.join(current_class_data_path, current_all_data[i])if current_idx <= train_stop_flag:copy2(src_img_path, train_folder)# print("{}复制到了{}".format(src_img_path, train_folder))train_num = train_num + 1elif (current_idx > train_stop_flag) and (current_idx <= val_stop_flag):copy2(src_img_path, val_folder)# print("{}复制到了{}".format(src_img_path, val_folder))val_num = val_num + 1else:copy2(src_img_path, test_folder)# print("{}复制到了{}".format(src_img_path, test_folder))test_num = test_num + 1current_idx = current_idx + 1print("*********************************{}*************************************".format(class_name))print("{}类按照{}:{}:{}的比例划分完成,一共{}张图片".format(class_name, slice_data[0], slice_data[1], slice_data[2], current_data_length))print("训练集{}:{}张".format(train_folder, train_num))print("验证集{}:{}张".format(val_folder, val_num))print("测试集{}:{}张".format(test_folder, test_num))if __name__ == '__main__':src_data_folder = r"D:\Desktop\segmentation_2021\data"target_data_folder = r"D:\Desktop\segmentation_2021\a"data_set_split(src_data_folder, target_data_folder, slice_data=[0.6,0.2,0.2])

划分训练集,验证集,测试集相关推荐

  1. 【小白学PyTorch】 2.浅谈训练集验证集和测试集

    文章目录: 经验误差与过拟合 评估方法 经验误差与过拟合 关键词:错误率(error rate),精度(accuracy). 错误率好理解,就是m个样本中,a个样本分类错误,则错误率E = a/m . ...

  2. 训练集 验证集_训练与验证、测试集数据分布不同的情况

    在不同分布的数据集上进行训练与验证.测试 深度学习需要大量的数据,但是有时我们可获得的满足我们真实需求分布的数据并不是那么多,不足以对我们的模型进行训练.这时我们就会收集大量相关的数据加入到训练集中, ...

  3. 训练集、验证集和测试集的概念及划分原则

    深度学习中,常将可得的数据集划分为训练集(training set),验证集(development set/validation set)和测试集(test set).下文主要回答以下几个问题:一是 ...

  4. YOLOv5将自己数据集划分为训练集、验证集和测试集

    在用自己数据集跑YOLOv5代码时候,需要将自己的VOC标签格式数据集转为yolo格式. 首先是要获取自己的数据集,然后再对数据集进行标注,保存为VOC(xml格式).然后再把标注完的数据集划分为训练 ...

  5. python 训练集 测试集 验证集划分_将自己的图片数据集分成训练集、验证集和测试集并用 Tensorflow2.0 导入...

    文章目录项目介绍 划分数据集1.在 dataset 目录下创建三个文件夹 2.将原来 dataset 文件夹中的子文件夹分别复制到这三个文件夹中 3.在 python 中指定所有路径 4.将这三个文件 ...

  6. 机器学习典型步骤以及训练集、验证集和测试集概念

    1. 机器学习典型步骤 数据采集和标记 数据清洗 特征选择 如房子的面积.地理位置.朝向.价格等. 模型选择 有监督还是无监督,问题领域.数据量大小.训练时长.模型准确度等多方面有关. 模型训练和测试 ...

  7. 【入门篇】如何正确使用机器学习中的训练集、验证集和测试集?

    [注] ·本文为转载文章,原文作者是王树义老师,原文链接为 https://zhuanlan.zhihu.com/p/71961236 训练集.验证集和测试集,林林总总的数据集合类型,到底该怎么选.怎 ...

  8. 训练集(train set) 验证集(validation set) 测试集(test set)

    在有监督(supervise)的机器学习中,数据集常被分成2~3个,即:训练集(train set) 验证集(validation set) 测试集(test set). http://blog.si ...

  9. 机器学习中训练集、验证集和测试集的区别

    通常,在训练有监督的机器学习模型的时候,会将数据划分为训练集.验证集合测试集,划分比例一般为0.6:0.2:0.2.对原始数据进行三个集合的划分,是为了能够选出效果(可以理解为准确率)最好的.泛化能力 ...

  10. [机器学习] 训练集(train set) 验证集(validation set) 测试集(test set)

    在有监督(supervise)的机器学习中,数据集常被分成2~3个即: 训练集(train set) 验证集(validation set) 测试集(test set) 一般需要将样本分成独立的三部分 ...

最新文章

  1. entity framework 6 我写了一个公用数据类
  2. 直播 | 北京邮电大学徐逸辰:图对比学习研究进展
  3. 在Red Hat 4 AS U7上安装oracle10gR2
  4. javaWeb注册,登陆,注销功能的实现
  5. 《JavaScript高级程序设计2》学习笔记——Ajax与JSON
  6. WEB前端开发书籍推荐
  7. MySQL 字符集和校对
  8. lisp取消选集选中状态_为什么对话框创建后是隐藏状态的
  9. Ubuntu64位安装Adobe Reader 9.5.5
  10. PHP+Redis实现高并发
  11. 帆软日期格式转换_FineReport中日期时间函数使用总结
  12. 激活ltsb2016_WIN10 LTSB 2016电话激活步骤详解
  13. Lazy Binomial Heaps
  14. 安卓miracast花屏_手机投屏电视频繁断开的解决办法
  15. CSSAPP稀里糊涂的读书笔记(一)计算机系统漫游
  16. 深度剖析Android IPC原理
  17. 使用springer nature模板页眉显示标题太长超出页面解决
  18. Python-七段数码管的绘制
  19. Android下DLNA开发简介
  20. mv强制覆盖 shell_Linux 使用 mv 命令重命名或移动文件

热门文章

  1. java poi 操作word遇到的问题
  2. 基础算法:斐波那契函数学习
  3. 沃趣赵晨 | 从技术岗位到产品经理:漫谈IT产品经理的生存之道
  4. SQL server-数据库的创建
  5. java计算机毕业设计springboot+vue青少年编程在线考试系统
  6. Arch Linux 下安装 st (终端模拟器)
  7. 张学友 - 蓝雨(粤)
  8. 巴黎大皇宫办秀,本土设计师品牌LANYU想在天猫做什么?
  9. Kubernetes监控:Dashbaord 2.0.0部署方式
  10. 《一年学完mit计算机课程》,用了这种学习方法,他一年学完了33门MIT计算机课程...