深度学习篇之数据集划分方法-附代码python详细注释

简介: 深度学习篇之数据集划分方法-附代码python详细注释

在深度学习训练模型过程中,我们第一步就是要收集相应的数据集,之后我们就是要将数据划分为训练集train和验证集val,但是有时间我们时常面临数据量庞大的问题,手动划分显然是不现实的,因为太麻烦了,而且不具有固定规律的随机性。


但是python对文件和文件夹极其强大的操作性帮助我们解决了数据集划分的问题,本篇博客我们将开源数据集划分的代码,让我们学习如何使用python划分自己的数据集。且我们在程序中设置随机种子,确保每次从数据集中抽取图片划分数据集的时候都是随机的,且保留种子,整个过程可复制。


先简单讲解一下代码的使用方法,在博客的最后会附上完整的代码

data_path = './data'#数据集存放的地方,建议在程序所在的文件夹下新建一个data文件夹,将需要划分的数据集存放进去
data_root = './'  #这里是生成的训练集和验证集所处的位置,这里设置的是在当前文件夹下。

主要在于这里,data_path,我在代码中设置的是在当前文件夹下新建一个data文件夹,将你需要划分的数据集放入data文件夹下,data_root,为我门划分完的训练集和验证集所放置的位置,我这里设置的是在当前文件夹下,我这里提到的当前文件夹下,就是与这个程序放置的位置一致的位置。


image.png


简单来说即,在程序的当前文件夹下,新建一个data文件夹用来放置自己的数据集,然后直接运行程序即可,生成的训练集和训练集train文件夹和验证集val文件夹会生成在当前文件夹下。


image.png


划分过程ing


image.png


这里的split_rate = 0.1 #这里填多少 就是验证集的比例是多少,比如填0.1就是验证集的数量占总数据集的10%。


split_rate = 0.1 #这里填多少 就是验证集的比例是多少,比如填0.1就是验证集的数量占总数据集的10%

附上数据集划分完整代码:

import os
from shutil import copy, rmtree
import random
def make_file(file_path: str):
    if os.path.exists(file_path):
        # 如果文件夹存在,则先删除原文件夹在重新创建
        rmtree(file_path)
    os.makedirs(file_path)
# 保证随机可复现
random.seed(0)#保证每次随机抽取的都可以复现
# 将数据集中10%的数据划分到验证集中
split_rate = 0.1 #这里填多少 就是验证集的比例是多少,比如填0.1就是验证集的数量占总数据集的10%
data_path = './data'#数据集存放的地方,建议在程序所在的文件夹下新建一个data文件夹,将需要划分的数据集存放进去
data_root = './'  #这里是生成的训练集和验证集所处的位置,这里设置的是在当前文件夹下。
data_class = [cla for cla in os.listdir(data_path)]
print("数据的种类分别为:")
print(data_class)# 输出数据种类,数据种类默认为读取的文件夹的名称
# 建立保存训练集的文件夹
train_data_root = os.path.join(data_root, "train") #训练集的文件夹名称为 train
make_file(train_data_root)
for num_class in data_class:
    # 建立每个类别对应的文件夹
    make_file(os.path.join(train_data_root, num_class))
# 建立保存验证集的文件夹
val_data_root = os.path.join(data_root, "val")#验证集的文件夹名称为 val
make_file(val_data_root)
for num_class in data_class:
    # 建立每个类别对应的文件夹
    make_file(os.path.join(val_data_root, num_class))
for num_class in data_class:
    num_class_path = os.path.join(data_path, num_class)
    images = os.listdir(num_class_path)
    num = len(images)
    val_index = random.sample(images, k=int(num*split_rate))   #随机抽取图片
    for index, image in enumerate(images):
        if image in val_index:
            # 将划分到验证集中的文件复制到相应目录
            data_image_path = os.path.join(num_class_path, image)
            val_new_path = os.path.join(val_data_root, num_class)
            copy(data_image_path, val_new_path)
        else:
            # 将划分到训练集中的文件复制到相应目录
            data_image_path = os.path.join(num_class_path, image)
            train_new_path = os.path.join(train_data_root, num_class)
            copy(data_image_path, train_new_path)
    print("\r[{}] split_rating [{}/{}]".format(num_class, index+1, num), end="")  # processing bar
    print()
print("       ")
print("       ")
print("划分完成")
相关文章
|
2天前
|
Python
在 Python 中,对列表进行排序有两种常用的方法
在 Python 中,对列表进行排序有两种常用的方法
|
1天前
|
Python
Python语言提供了多种输出格式化的方法,这些方法随着时间的推移和版本的更新而发展
【6月更文挑战第19天】Python格式化方法包括过时的`%`操作符,`str.format()`,推荐的f-string(Python 3.6+)和Template strings。f-string提供最佳的可读性和性能,`str.format()`是通用的,而`%`不推荐使用。模板字符串用于特定场景。对于旧版Python,使用`str.format()`或`%`。
12 4
|
1天前
|
Python
Python Google风格注释详解
Google风格注释是Python代码注释的一种标准化格式,它提供了一种规范的注释格式,使得代码更加易读、易于维护。Google风格注释使用三个双引号来包围注释内容,并按照一定规范编写。在注释中使用动词短语来描述函数的行为,并使用被动语态。在注释中使用正确的标点符号和缩进,使得注释易于阅读和理解。通过使用Google风格注释,我们可以为代码提供清晰的文档和说明,使得代码更加易读、易于维护。
9 3
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
豆瓣评分9.5!清华大牛熬夜整理的Python深度学习教程开发下载!
深度学习目前已经成为了人工智能领域的突出话题。它在“计算机视觉和游戏(AlphaGo)等领域的突出表现而闻名。 今天给小伙伴们分享的这份手册,详尽介绍了用 Python 和 Keras进行深度学习的探索实践,涉及计算机视觉、自然语言处理、生成式模型等应用。
|
1天前
|
Python
Python reStructuredText风格注释详解
reStructuredText风格注释是Python代码注释的一种标准化格式,它提供了一种规范的注释格式,使得代码更加易读、易于维护。reStructuredText风格注释使用两个等号来包围注释标题,并按照一定规范编写。通过使用reStructuredText风格注释,我们可以为代码提供清晰的文档和说明,使得代码更加易读、易于维护。
7 2
|
1天前
|
Python
Python三种标准输出重定向方法
Python 提供了标准库中的 sys.stdout 对象来代表标准输出。如果我们想将输出重定向到其他位置,例如内存、文件或自定义类,我们可以通过一些技巧来实现。
9 2
|
1天前
|
存储 缓存 调度
Python教程:一文了解10种数据结构在Python中的实现方法
数据结构是计算机科学中非常重要的概念,它用于组织和存储数据,使得数据可以高效地被访问和操作。在编程中,选择合适的数据结构对于解决问题和提高程序性能至关重要。
18 1
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
豆瓣评分9.5!清华大牛熬夜整理的Python深度学习教程开发下载!
深度学习目前已经成为了人工智能领域的突出话题。它在“计算机视觉和游戏(AlphaGo)等领域的突出表现而闻名。 今天给小伙伴们分享的这份手册,详尽介绍了用 Python 和 Keras进行深度学习的探索实践,涉及计算机视觉、自然语言处理、生成式模型等应用。
|
2天前
|
Java 索引 Python
深入理解 Python 类中的各种方法
在 Python 中,类不仅仅是对象的蓝图,它还提供了多种方法,使我们能够以更灵活和强大的方式编写代码。本文将详细介绍 Python 类中的各种方法,包括实例方法、类方法、静态方法、特殊方法等,并通过示例展示它们的用法和区别。
|
2天前
|
Python
python项目依赖库打包发布方法
python项目依赖库打包发布方法
8 0