Python实现随机划分图片数据集的示例代码

yizhihongxing

下面是Python实现随机划分图片数据集的完整攻略。

1. 问题背景

在机器学习领域中,将数据集按照一定的比例划分为训练集、验证集和测试集是一项基础任务。

数据集的划分对模型训练和评估的结果都有着至关重要的影响,因此我们需要仔细地进行划分。

在本次攻略中,我们将采用Python语言实现对图片数据集的随机划分,并且按照规定的比例划分为训练集和验证集,代码也可以用来划分为训练集、验证集和测试集。

2. 需求分析

任务的输入是一个图片文件夹,输出是划分好的训练集和验证集。

我们需要定义以下参数:

  • 数据集路径
  • 训练集占比
  • 验证集占比
  • 是否打乱数据集
  • 是否需要输出到文件

3. 实现流程

实现过程中,我们需要按照以下步骤进行:

3.1 读取文件夹中的所有文件

import os
import random
from shutil import copyfile

def get_file_list(path):
    file_list = []
    for root, dirs, files in os.walk(path):
        for file in files:
            file_list.append(os.path.join(root, file))
    return file_list

3.2 打乱文件列表

在获取到文件列表之后,我们可以使用Python内置的random库中的shuffle方法打乱文件列表。

def shuffle_list(file_list):
    random.shuffle(file_list)
    return file_list

3.3 划分数据集

在打乱文件列表之后,我们可以按照指定的训练集和验证集占比,将文件列表划分为训练集和验证集。

def split_data(file_list, training_ratio, validation_ratio):
    training_list = file_list[:int(len(file_list)*training_ratio)]
    validation_list = file_list[int(len(file_list)*training_ratio):int(len(file_list)*(training_ratio+validation_ratio))]
    return training_list, validation_list

3.4 复制文件到指定目录

在划分好训练集和验证集之后,我们需要复制文件到指定的目录。

def copy_files(file_list, output_path):
    for file in file_list:
        _, filename = os.path.split(file)
        output_file = os.path.join(output_path, filename)
        copyfile(file, output_file)

3.5 完整代码

将以上步骤整合起来,形成完整的代码如下:

import os
import random
from shutil import copyfile

def get_file_list(path):
    file_list = []
    for root, dirs, files in os.walk(path):
        for file in files:
            file_list.append(os.path.join(root, file))
    return file_list

def shuffle_list(file_list):
    random.shuffle(file_list)
    return file_list

def split_data(file_list, training_ratio, validation_ratio):
    training_list = file_list[:int(len(file_list)*training_ratio)]
    validation_list = file_list[int(len(file_list)*training_ratio):int(len(file_list)*(training_ratio+validation_ratio))]
    return training_list, validation_list

def copy_files(file_list, output_path):
    for file in file_list:
        _, filename = os.path.split(file)
        output_file = os.path.join(output_path, filename)
        copyfile(file, output_file)

def main(input_path, output_path, training_ratio, validation_ratio, shuffle=True, to_file=True):
    # 获取文件列表
    file_list = get_file_list(input_path)

    # 打乱文件列表
    if shuffle:
        file_list = shuffle_list(file_list)

    # 划分训练集和验证集
    training_list, validation_list = split_data(file_list, training_ratio, validation_ratio)

    # 输出到文件
    if to_file:
        if not os.path.exists(output_path):
            os.makedirs(output_path)
        copy_files(training_list, os.path.join(output_path, "training"))
        copy_files(validation_list, os.path.join(output_path, "validation"))
    else:
        return training_list, validation_list


if __name__ == "__main__":
    input_path = "./data"
    output_path = "./output"
    training_ratio = 0.8
    validation_ratio = 0.2

    main(input_path, output_path, training_ratio, validation_ratio)

4. 示例说明

4.1 示例一

以下示例将图片数据集随机划分为训练集和测试集,训练集占比80%。

if __name__ == "__main__":
    input_path = "./data"
    output_path = "./output"
    training_ratio = 0.8
    validation_ratio = 0

    main(input_path, output_path, training_ratio, validation_ratio)

4.2 示例二

以下示例将图片数据集随机划分为训练集和验证集,训练集占比70%,验证集占比30%。

if __name__ == "__main__":
    input_path = "./data"
    output_path = "./output"
    training_ratio = 0.7
    validation_ratio = 0.3

    main(input_path, output_path, training_ratio, validation_ratio)

以上就是Python实现随机划分图片数据集的完整攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现随机划分图片数据集的示例代码 - Python技术站

(1)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • 详解Python如何轻松实现定时执行任务

    下面详细讲解如何使用Python轻松实现定时执行任务: 1. 背景介绍 在某些场景下,我们需要对某些任务进行定时执行,比如每天定时备份数据库、每周定时清理垃圾文件等等。Python提供了丰富的库和工具,使得我们可以很容易地实现这些功能。 2. 实现步骤 下面我们介绍一下如何使用Python实现定时执行任务的步骤。 2.1 安装定时模块 在Python中,有一…

    python 2023年5月18日
    00
  • 十个Python自动化常用操作,即拿即用

    十个Python自动化常用操作 Python是一门强大的编程语言,能够帮助我们轻松实现自动化操作。下面列举了十个Python自动化常用操作,让大家即拿即用。 1. 文件操作 1.1 创建文件 可以使用Python的open()函数创建文件,代码如下所示: file = open(‘filename.txt’,’w’) file.close() 1.2 删除文…

    python 2023年5月18日
    00
  • 将Python中的数据存储到系统本地的简单方法

    将Python中的数据存储到系统本地可以使用文件系统或数据库来实现。其中,文件系统是一种更加简单的方式,可以通过以下步骤操作: 打开文件 写入数据 关闭文件 具体步骤如下: 打开文件 在Python中,可以使用内置的open()函数打开文件。open()函数的第一个参数是文件路径和名称,第二个参数是文件打开模式,可选参数为’r’、’w’、’a’等。其中,’r…

    python 2023年6月2日
    00
  • python中如何使用正则表达式的集合字符示例

    在Python中,可以使用re模块来进行正则表达式操作。正则表达式的集合字符用于匹配一组字符中的任意一个字符,这些集合字符通常放在方括号[]中。以下是使用正则表达式的集合字符的攻略: 1. 匹配任意数字或字母 在正则表达式中,可以使用集合字符[0-9A-Za-z]来匹配任意一个数字或字母。具体代码如下: import re # 匹配任意数字或字母 text …

    python 2023年5月13日
    00
  • Python 数据类型中的字符串和数字

    Python 是一门面向对象、解释型、交互性高的编程语言,其支持多种不同的数据类型,包括字符串、数字、列表、元组、字典等。本文将详细讲解 Python 数据类型中的字符串和数字。 字符串 在 Python 中,字符串是一系列字符的集合,可以用单引号、双引号或三引号表示。下面是一些例子: str1 = ‘hello world’ str2 = "py…

    python 2023年6月3日
    00
  • python 中 关于reverse() 和 reversed()的用法详解

    Python 关于 reverse() 和 reversed() 的用法详解 介绍 reverse() 和 reversed() 都是对 Python 中列表进行反转的方法。但是它们之间有一些不同之处,本文将对这两种方法进行详细的讲解。 reverse() reverse() 是列表的一个方法,它用于将原有列表顺序翻转。该方法不返回任何值,它会直接修改原有列…

    python 2023年5月14日
    00
  • Python 字典中的所有方法及用法

    Python字典中的所有方法及用法 Python中的字典(Dict)是一种非常实用的数据类型,类似于JavaScript的对象(Object)。字典是一组键(key)和值(value)的集合,可以通过键来快速查找对应的值。在Python中,字典使用花括号{}表示,key和value之间使用冒号:分隔,多个键值对之间使用逗号,分隔,例如: my_dict = …

    python 2023年5月13日
    00
  • python实现二维数组的对角线遍历

    对于在Python中实现对角线遍历的问题,我们可以采用以下方法: 创建一个二维数组 可以使用列表嵌套列表或NumPy库中的ndarray来创建一个二维数组。举个例子,如果我们要创建一个大小为3 x 3的矩阵,那么使用列表嵌套列表的方法可以这样写: matrix = [ [1,2,3], [4,5,6], [7,8,9] ] 如果我们要使用NumPy来创建一个…

    python 2023年6月6日
    00
合作推广
合作推广
分享本页
返回顶部