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

下面是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正则表达式学习小例子 正则表达式是一种强大的文本处理工具,可以用于各种文本处理,如清洗、文本析、信息提取等。在Python中,我们使用re模块提供的函数来操作正则表式。本攻略将详讲解Python正则表达式的用法,包括正则表达式的语法、元字符的含义和示例说明。 正则表达式的语法 正则表达式是一种用于匹配字符串的模式,由普通字符和特殊字符组成普通字符…

    python 2023年5月14日
    00
  • python通过get,post方式发送http请求和接收http响应的方法

    要发送 HTTP 请求并获取响应,我们可以使用Python的标准库中的urllib或第三方的requests库。以下是Python中使用get和post方式发送 HTTP 请求的完整指南: 使用urllib库发送 HTTP 请求 1.发送GET请求并获取响应 import urllib.request url = ‘http://www.example.co…

    python 2023年5月20日
    00
  • 深入了解Python中运算符函数的使用

    深入了解Python中运算符函数的使用 1. 了解Python中的运算符函数 Python提供了许多运算符函数,例如算数运算、比较运算、逻辑运算、位运算等。这些运算符函数可以直接应用于Python内置类型,如数字、字符串、列表、元组等。 2. 算数运算符函数 Python中的算数运算符函数包括加(+)、减(-)、乘()、除(/)和求幂(*)等。例如,我们可以…

    python 2023年6月5日
    00
  • python数据库操作mysql:pymysql、sqlalchemy常见用法详解

    Python数据库操作MySQL:pymysql、SQLAlchemy常见用法详解 本篇攻略将详细讲解Python通过pymysql和SQLAlchemy库操作MySQL数据库的常见使用方法。 pymysql pymysql是使用Python操作MySQL数据库的最常用模块,因为它易于使用和强大的功能,下面将分别介绍安装pymysql、连接数据库、数据库操作…

    python 2023年6月5日
    00
  • python使用beautifulsoup从爱奇艺网抓取视频播放

    Python使用BeautifulSoup从爱奇艺网抓取视频播放 在本文中,我们将介绍如何使用Python和BeautifulSoup库从爱奇艺网抓取视频播放。我们将提供两个示例,演示如何获取视频标题和视频播放链接。 安装BeautifulSoup库 在使用BeautifulSoup库之前,我们需要先安装它。可以使用pip命令来安装BeautifulSoup…

    python 2023年5月15日
    00
  • Python 变量作用域详解!

    Python的四种作用域 Python中的变量作用域指的是变量在程序中可以被访问的范围。Python中有以下四种作用域: Local:局部作用域,指函数或代码块中的变量,只能在该函数或代码块中被访问。当函数执行结束或代码块执行结束时,变量的作用域就会结束。 Enclosing:嵌套作用域,指函数内部包含其他函数或代码块,内部函数或代码块可以访问外部函数或代码…

    2023年2月20日
    00
  • Python中调用其他程序的方式详解

    Python中调用其他程序的方式详解 在Python中,我们经常需要调用其他的程序来实现特定的功能或者完成某些任务。通常遇到这种情况,我们可以使用os模块和subprocess模块提供的相关函数来实现对其他程序的调用操作。 使用os模块进行调用 os模块可以用来调用其他进程或者在当前进程中使用shell命令。使用os.system()函数可以简单地执行命令,…

    python 2023年5月31日
    00
  • Hadoop Streaming简单作业失败错误python

    【问题标题】:Hadoop Streaming simple job fails error pythonHadoop Streaming简单作业失败错误python 【发布时间】:2023-04-05 17:21:02 【问题描述】: 我是 hadoop 和 mapreduce 的新手,我正在尝试编写一个 mapreduce 来计算字数 txt 文件的前 …

    Python开发 2023年4月5日
    00
合作推广
合作推广
分享本页
返回顶部