You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Colab中的图像文件夹按比例拆分为训练/验证/测试集?

数据集拆分解决方案

splitfolders代码不生效的原因及修正

执行无输出问题核心是路径配置错误,Colab的根目录前缀为/,你的输入路径漏写了开头的斜杠,导致库找不到对应数据源。
splitfolders默认生成的三个子文件夹命名规则为train、val、test,直接生成在你指定的output路径下。
修正后的可运行代码如下:

# 未安装依赖先执行安装
!pip install split-folders
import splitfolders

# 路径开头加/指向Colab根目录,output用绝对路径更方便查找生成的文件
splitfolders.ratio("/content/data", output="/content/output", seed=1337, ratio=(.8, .1, .1), group_prefix=None)

执行完成后直接访问/content/output路径,即可看到三个拆分后的文件夹。

PyTorch原生实现方案

不需要依赖第三方拆分库,自定义程度更高,完整可运行代码如下:

import os
import torch
import random
import shutil
from torch.utils.data import random_split
from torchvision.datasets import ImageFolder

# 基础参数配置
DATASET_PATH = "/content/data"  # 原始图像存放路径
OUTPUT_PATH = "/content/split_dataset"
TRAIN_RATIO = 0.8
VAL_RATIO = 0.1
TEST_RATIO = 0.1
SEED = 1337

# 读取原始数据集(要求原始数据按类别存放在子文件夹中,适配ImageFolder格式)
dataset = ImageFolder(DATASET_PATH)
# 按比例计算各拆分集样本量
total_len = len(dataset)
train_len = int(total_len * TRAIN_RATIO)
val_len = int(total_len * VAL_RATIO)
test_len = total_len - train_len - val_len
# 拆分数据集,固定种子保证可复现
train_dataset, val_dataset, test_dataset = random_split(
    dataset, [train_len, val_len, test_len], generator=torch.Generator().manual_seed(SEED)
)

# 拆分文件写入函数
def save_split_files(split_name, split_dataset):
    # 创建拆分集根目录、对应类别子目录
    split_root = os.path.join(OUTPUT_PATH, split_name)
    os.makedirs(split_root, exist_ok=True)
    for class_name in split_dataset.dataset.classes:
        os.makedirs(os.path.join(split_root, class_name), exist_ok=True)
    # 复制图像到对应路径
    for idx in split_dataset.indices:
        img_path, class_idx = split_dataset.dataset.samples[idx]
        class_name = split_dataset.dataset.classes[class_idx]
        target_path = os.path.join(split_root, class_name, os.path.basename(img_path))
        shutil.copy(img_path, target_path)

# 执行全量拆分写入
save_split_files("train", train_dataset)
save_split_files("val", val_dataset)
save_split_files("test", test_dataset)

执行后所有拆分后的文件都会存放在/content/split_dataset路径下,保持和原始数据集一致的类别子目录结构,可直接被ImageFolder加载用于后续训练。

内容的提问来源于stack exchange,提问作者french_fries

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:27:02