在深度学习模型训练中,我们通常需要将数据集划分为训练集(Train)、验证集(Val)和测试集(Test)。训练集用于模型参数学习,验证集用于超参数调优,测试集用于评估模型最终泛化能力。手动划分不仅效率低,还难以保证随机性,这里分享一段自动划分数据集的 Python 脚本。
代码功能说明
这段代码的核心功能是:将原始数据集中的图片和对应标签,按照 8:1:1 的比例随机划分为训练集、验证集和测试集,并分别存放于对应目录中,同时保证划分结果可复现。
代码如下
import os
import random
import shutil
# 分割训练集和验证集
# 设置随机种子以保证结果可复现
random.seed(42)
# 数据集根目录
data_dir = './datasets'
images_dir = os.path.join(data_dir, 'images')
labels_dir = os.path.join(data_dir, 'labels')
# 创建目录
os.makedirs(os.path.join(images_dir, 'train'), exist_ok=True)
os.makedirs(os.path.join(images_dir, 'val'), exist_ok=True)
os.makedirs(os.path.join(labels_dir, 'train'), exist_ok=True)
os.makedirs(os.path.join(labels_dir, 'val'), exist_ok=True)
os.makedirs(os.path.join(images_dir, 'test'), exist_ok=True)
os.makedirs(os.path.join(labels_dir, 'test'), exist_ok=True)
# 获取所有的图像文件名
image_files = [f for f in os.listdir(os.path.join(data_dir, 'images')) if f.endswith('.jpg')]
# 计算训练集和验证集的大小
train_ratio = 0.8
val_ratio = 0.1
test_ratio = 0.1
total_images = len(image_files)
train_index = int(total_images * train_ratio)
val_index = int(total_images * (train_ratio + val_ratio))
random.shuffle(image_files)
train_images = image_files[:train_index]
val_images = image_files[train_index:val_index]
test_images = image_files[val_index:]
img_file train_images:
label_file = img_file.replace(, )
shutil.copy(os.path.join(data_dir, , img_file), os.path.join(images_dir, ))
shutil.copy(os.path.join(data_dir, , label_file), os.path.join(labels_dir, ))
img_file val_images:
label_file = img_file.replace(, )
shutil.copy(os.path.join(data_dir, , img_file), os.path.join(images_dir, ))
shutil.copy(os.path.join(data_dir, , label_file), os.path.join(labels_dir, ))
img_file test_images:
label_file = img_file.replace(, )
shutil.copy(os.path.join(data_dir, , img_file), os.path.join(images_dir, ))
shutil.copy(os.path.join(data_dir, , label_file), os.path.join(labels_dir, ))
()


