将分类数据划分为训练集、测试集与验证集

用于将指定路径下的 0-6 编号的 7 个文件夹中的数据按照 8:1:1 的比例划分到 train、val 和 test 这三个文件夹中。

1.代码功能说明

  1. 源文件夹路径:假设编号文件夹在 src_path 中,每个编号文件夹的名称为 0, 1, 2, ..., 6。
  2. 划分比例:默认按照 8:1:1 的比例划分,分别对应训练集、验证集和测试集。
  3. 数据打乱:使用 random.shuffle 将每个编号文件夹内的文件顺序打乱,确保划分均匀。
  4. 目标文件夹创建:在 dest_path 下创建 train、val 和 test 文件夹。
  5. 文件复制:使用 shutil.copy 将文件从源文件夹复制到目标文件夹。
python 复制代码
import os
import shutil
import random

def split_data(src_path, dest_path, split_ratio=(0.8, 0.1, 0.1)):
    # 创建目标文件夹结构
    for split in ['train', 'val', 'test']:
        split_path = os.path.join(dest_path, split)
        os.makedirs(split_path, exist_ok=True)
        for i in range(7):  # 创建 0-6 的子文件夹
            os.makedirs(os.path.join(split_path, str(i)), exist_ok=True)

    # 遍历编号文件夹(0-6)
    for folder in range(7):
        folder_path = os.path.join(src_path, str(folder))
        if not os.path.exists(folder_path):
            print(f"文件夹 {folder_path} 不存在,跳过...")
            continue

        # 获取文件列表并打乱顺序
        files = os.listdir(folder_path)
        random.shuffle(files)

        # 按照比例划分
        total_files = len(files)
        train_end = int(total_files * split_ratio[0])
        val_end = train_end + int(total_files * split_ratio[1])

        train_files = files[:train_end]
        val_files = files[train_end:val_end]
        test_files = files[val_end:]

        # 将文件复制到对应的目标文件夹
        for file in train_files:
            shutil.copy(os.path.join(folder_path, file), os.path.join(dest_path, "train", str(folder), file))
        for file in val_files:
            shutil.copy(os.path.join(folder_path, file), os.path.join(dest_path, "val", str(folder), file))
        for file in test_files:
            shutil.copy(os.path.join(folder_path, file), os.path.join(dest_path, "test", str(folder), file))

        print(f"文件夹 {folder_path} 已处理完成,训练集:{len(train_files)},验证集:{len(val_files)},测试集:{len(test_files)}")

# 使用
src_path = "/path/to/source/folders"  # 原始数据文件夹路径
dest_path = "/path/to/destination/folders"  # 目标文件夹路径
split_data(src_path, dest_path)
相关推荐
冬奇Lab1 分钟前
一天一个开源项目(第56篇):人人都能用英语 - AI 时代的外语学习开源项目
人工智能·开源·资讯
ab1515176 分钟前
3.25完成*23、*24、*28、*30、*33、*38、*39、*40
算法
颜酱19 分钟前
回溯算法实战练习(3)
javascript·后端·算法
前端摸鱼匠32 分钟前
【AI大模型春招面试题12】Scaling Laws揭示了模型性能、数据量、计算量之间的什么关系?
人工智能·ai·语言模型·面试·大模型
yuhulkjv33534 分钟前
deepseek怎么复制表格
人工智能·ai·chatgpt·豆包·deepseek·ai导出鸭
小陈工1 小时前
2026年3月26日技术资讯洞察:WebAssembly崛起、AI代码质量危机与开源安全新挑战
人工智能·python·安全·架构·开源·fastapi·wasm
云飞云共享云桌面1 小时前
非标自动化研发成本高?云飞云共享云桌面:1台主机=10台工作站,年省数十万。
大数据·运维·服务器·人工智能·自动化·云计算·电脑
㱘郳1 小时前
大语言模型开发与应用V5.0
人工智能·语言模型·自然语言处理
2301_766558651 小时前
深度解析:矩阵跃动小陌GEO语义场建模原理,筑牢企业AI搜索占位技术壁垒
人工智能·线性代数·矩阵
Lab_AI1 小时前
AI for Science应用:深度学习助力新型靶蛋白的药物从头设计(AIDD助力药物研发)
人工智能·深度学习·aidd·药物发现·新靶点药物设计