0
点赞
收藏
分享

微信扫一扫

利用程序对已有的大量数据集自动分类成训练集和测试集。

项目场景:

当我们在进行图像处理的学习的时候,往往会去网上去下载一些数据集,比如CIFAR10数据集,或者是一些花的分类等等。


问题描述及解决方案:

那么问题就来了,很多数据集下载下来之后,是没有分类好的,如果人工进行分类的话,就会耗费很多的时间和精力。所以在这里介绍一种使用python程序进行自动分类为训练集和测试集的方法。下面以一些花的分类举例:
1、将如下代码在pycharm等python编辑器中保存为.py文件,文件名为’sep_data’。90%的训练集,10%的测试集,如果想修改比例,可以在代码中找到相应位置改变数值即可。

import os
from shutil import copy, rmtree
import random


def mk_file(file_path: str):
    if os.path.exists(file_path):
        # 如果文件夹存在,则先删除原文件夹在重新创建
        rmtree(file_path)
    os.makedirs(file_path)


def main():
    # 保证随机可复现
    random.seed(0)

    # 将数据集中10%的数据划分到验证集中
    split_rate = 0.1

    # 指向你解压后的flower_photos文件夹
    cwd = os.getcwd()
    data_root = os.path.join(cwd, "flower_data")
    origin_flower_path = os.path.join(data_root, "flower_photos")
    assert os.path.exists(origin_flower_path), "path '{}' does not exist.".format(origin_flower_path)

    flower_class = [cla for cla in os.listdir(origin_flower_path)
                    if os.path.isdir(os.path.join(origin_flower_path, cla))]

    # 建立保存训练集的文件夹
    train_root = os.path.join(data_root, "train")
    mk_file(train_root)
    for cla in flower_class:
        # 建立每个类别对应的文件夹
        mk_file(os.path.join(train_root, cla))

    # 建立保存验证集的文件夹
    val_root = os.path.join(data_root, "test")
    mk_file(val_root)
    for cla in flower_class:
        # 建立每个类别对应的文件夹
        mk_file(os.path.join(val_root, cla))

    for cla in flower_class:
        cla_path = os.path.join(origin_flower_path, cla)
        images = os.listdir(cla_path)
        num = len(images)
        # 随机采样验证集的索引
        eval_index = random.sample(images, k=int(num*split_rate))
        for index, image in enumerate(images):
            if image in eval_index:
                # 将分配至验证集中的文件复制到相应目录
                image_path = os.path.join(cla_path, image)
                new_path = os.path.join(val_root, cla)
                copy(image_path, new_path)
            else:
                # 将分配至训练集中的文件复制到相应目录
                image_path = os.path.join(cla_path, image)
                new_path = os.path.join(train_root, cla)
                copy(image_path, new_path)
            print("\r[{}] processing [{}/{}]".format(cla, index+1, num), end="")  # processing bar
        print()

    print("processing done!")


if __name__ == '__main__':
    main()

        }

2、在同个文件夹中新建文件夹,命名为flower_data,在flower_data文件夹中新建文件夹,命名为flower_photos。将下载下来的数据集解压到此文件夹中。此时你会发现文件夹中有五种花的类别。
3、返回到sep_data 所在文件夹,在空白处右键鼠标,点击“在windows终端中打开”,打开之后输入“python .\sep_data.py”,回车,便可以自动分好类。此时再回到flower_data文件夹中会发现,多了两个文件夹,一个是train文件夹,一个是test文件夹。
右击鼠标
在这里插入图片描述


举报

相关推荐

0 条评论