Python划分图像文件夹为训练集、验证集和测试集——split-folders

简介

深度学习图像分类常需要将数据集分为训练集(train)、验证集(validation)和测试集(test),而 TensorFlow 没有提供相关函数(准确来说是很难用),使用 split-folders 可轻松实现。

功能:

  • 将文件划分为训练集和验证集(或加上测试集)

  • 适用于不同文件类型

  • 打乱文件顺序

  • 种子 seed 让划分可复现

  • 对不平衡数据集进行随机过采样

  • 可选组文件的前缀

  • 适用任何操作系统

Split Train data into Training and Validation when using ImageDataGenerator in Keras

安装

pip install split-folders

初试

下载数据集 flower_photos.tgz 并解压

数据集是不平衡的,即每个类的样本数不同(广义来说是平衡的,比例偏差不大)

代码

import splitfolders
# train:validation:test=8:1:1
splitfolders.ratio(input='flower_photos', output='output', seed=1337, ratio=(0.8, 0.1, 0.1))

效果

可以看到测试集和验证集数量大致相同,文档表示不平衡的数据集应该用 splitfolders.fixed()

用法

函数功能适用情况splitfolders.ratio('input_folder', output='output', seed=1337, ratio=(0.8, 0.1, 0.1), group_prefix=None)按比例划分训练集、验证集、测试集,默认情况关闭过采样,过采样只适用于训练集,因为验证集和测试集中有重复是作弊平衡数据集splitfolders.fixed('input_folder', output='output', seed=1337, fixed=(100, 100), oversample=False, group_prefix=None)给验证集、测试集固定数量图片,其余均划分到训练集不平衡数据集

只划分训练和验证集的话,ratio 改为 (0.8, 0.2)

命令行

Usage:
    splitfolders [--output] [--ratio] [--fixed] [--seed] [--oversample] [--group_prefix] folder_with_images
Options:
    --output        path to the output folder. defaults to `output`. Get created if non-existent.
    --ratio         the ratio to split. e.g. for train/val/test `.8 .1 .1 --` or for train/val `.8 .2 --`.
    --fixed         set the absolute number of items per validation/test set. The remaining items constitute
                    the training set. e.g. for train/val/test `100 100` or for train/val `100`.
    --seed          set seed value for shuffling the items. defaults to 1337.
    --oversample    enable oversampling of imbalanced datasets, works only with --fixed.
    --group_prefix  split files into equally-sized groups based on their prefix
Example:
    splitfolders --ratio .8 .1 .1 -- folder_with_images

如:

splitfolders --output output --ratio 0.8 0.1 0.1 -- flower_photos

参考文献

  1. split-folders GitHub

  1. How to split folder of images into test/training/validation sets with stratified sampling?

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于图像多分类任务,我们需要准备好训练集测试集,并且需要把图像转换成PyTorch中的`Tensor`格式。以下是一个简单的例子: ```python import os import torch import torchvision.transforms as transforms from torchvision.datasets import ImageFolder from torch.utils.data import DataLoader # 定义数据转换 transform = transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) # 加载训练集 train_dataset = ImageFolder(root='./train', transform=transform) train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True) # 加载测试集 test_dataset = ImageFolder(root='./test', transform=transform) test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False) ``` 假设我们的训练集测试集分别保存在`./train`和`./test`文件夹中,每个文件夹下都有多个子文件夹,每个子文件夹包含一种类别的图片。`ImageFolder`类会自动把图片按照类别进行分类,并且把图片转换成`Tensor`格式。 在上面的代码中,我们使用了`transforms`模块来定义数据转换的操作,包括将图片重新调整大小为256x256、居中裁剪为224x224、将像素值归一化到0到1之间、使用均值和标准差进行标准化处理等操作。这些操作可以提高模型的训练效果。 最后我们使用`DataLoader`类来加载数据集。`DataLoader`类可以帮助我们自动批量加载数据,并且可以进行数据打乱和多线程加载等操作。在训练过程中,我们可以使用`train_loader`来加载训练集数据,使用`test_loader`来加载测试集数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值