【AI目标检测】划分train、val、test数据集

该博客介绍了一个用于自动化划分和合并数据集的Python代码。通过设置种子值确保可重复性,它将数据集按指定比例划分为训练、验证和测试集。此外,还提供了一个函数来恢复原始数据集状态。此工具对于机器学习和深度学习项目的预处理阶段非常实用。
摘要由CSDN通过智能技术生成

每次做新的数据集总是需要面临划分数据集的问题
就尝试写了一个划分数据集的代码

import os
import random
import shutil


def splitDataset(together_path, split_paths, use_seed=False):
    all_file = os.listdir(together_path)
    if use_seed:
        random.seed(529)
    sample = random.sample(all_file, int(len(all_file) * train_percent))
    for name in all_file:
        if not os.path.isdir(name):
            if name in sample:
                shutil.move(os.path.join(together_path, name), os.path.join(split_paths[0], name))
            else:
                shutil.move(os.path.join(together_path, name), os.path.join(split_paths[1], name))

    val_test = os.listdir(split_paths[1])
    val_sample = random.sample(val_test, int(len(val_test) * val_percent))
    for left_name in val_test:
        if left_name not in val_sample:
            shutil.move(os.path.join(split_paths[1], left_name), os.path.join(split_paths[2], left_name))


def mergeDataset(together_path, split_paths):
    for split_path in split_paths:
        all_file = os.listdir(split_path)
        for file in all_file:
            shutil.move(os.path.join(split_path, file), os.path.join(together_path, file))


if __name__ == '__main__':
    img_path = r'your\image\path'
    ann_path = r'your\annotation\path'
    save_path = [r'train\dir\to\save',
                 r'val\dir\to\save',
                 r'test\dir\to\save']

    # 用于验证的图像所占剩下图片的比例
    val_percent = 0.95
    # 用于训练的图像所占比例
    train_percent = 0.8

    for path in save_path:
        if not os.path.exists(path):
            os.makedirs(path)

    # 划分数据集
    splitDataset(img_path, save_path, use_seed=True)
    # 撤回划分数据集
    # mergeDataset(img_path, save_path)

在TensorFlow中,将数据集按照一定比例划分为训练集、验证集和测试集通常是为了评估模型的性能并防止过拟合。这可以通过`tf.data.Dataset` API以及一些预处理步骤来完成。以下是基本步骤: 1. **导入所需库**: ```python import tensorflow as tf from sklearn.model_selection import train_test_split ``` 2. **加载数据**(这里假设数据已经准备好): ```python dataset = ... # 加载数据集,例如Pandas DataFrame或NumPy数组 ``` 3. **划分数据**: 使用`train_test_split`函数从sklearn库划分原始数据,然后创建相应的`tf.data.Dataset`实例: ```python df_train, df_val, df_test = train_test_split(dataset, test_size=0.2, random_state=42) # 80%训练,10%验证,10%测试 train_dataset = tf.data.Dataset.from_tensor_slices((df_train.data, df_train.labels)) val_dataset = tf.data.Dataset.from_tensor_slices((df_val.data, df_val.labels)) test_dataset = tf.data.Dataset.from_tensor_slices((df_test.data, df_test.labels)) ``` 4. **数据预处理**(如归一化、转换等): ```python def preprocess(data, labels): # 在这里添加数据预处理步骤 return preprocessed_data, labels train_dataset = train_dataset.map(preprocess) val_dataset = val_dataset.map(preprocess) test_dataset = test_dataset.map(preprocess) ``` 5. **迭代器或批次处理**: ```python batch_size = 32 train_iterator = train_dataset.shuffle(buffer_size=len(train_dataset)).batch(batch_size) val_iterator = val_dataset.batch(batch_size) test_iterator = test_dataset.batch(batch_size) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值