详解PyTorch预定义数据集类datasets.ImageFolder使用方法
作者:实力 发布时间:2022-01-30 20:15:07
datasets.ImageFolder是PyTorch提供的一个预定义数据集类,用于处理图像数据。它可以方便地将一组图像加载到内存中,并为每个图像分配标签。
数据集准备和目录结构
要使用datasets.ImageFolder,我们需要准备好一个包含图像数据的目录,并按照以下方式进行组织:
root/
class1/
img1.jpg
img2.jpg
...
class2/
img1.jpg
img2.jpg
...
...
其中,root代表数据集根目录,class1、class2等代表不同的分类标签,img1、img2等代表图像文件名。每个类别(也称为标签)应该有一个单独的子目录,子目录中包含这个类别的所有图像文件。同时,每个图像文件在对应的子目录下,以其文件名作为其类别标签。这种目录组织方式可以让我们轻松获取图像和对应的标签信息。
加载数据集
完成数据集准备之后,我们就可以使用datasets.ImageFolder来加载它了。下面是一个示例代码:
import torchvision.datasets as datasets
import torchvision.transforms as transforms
data_dir = "/path/to/data"
transforms = transforms.Compose([
transforms.Resize(size=(224, 224)),
transforms.ToTensor(),
])
dataset = datasets.ImageFolder(root=data_dir, transform=transforms)
在这个例子中,我们首先导入datasets和transforms模块,然后指定数据集的根目录data_dir。接下来,我们定义一个 transforms 对象,它将图像转换为PyTorch张量,并调整大小为(224, 224)。
最后,我们使用datasets.ImageFolder来加载图像数据集。ImageFolder类需要两个参数:root 和 transform。root是数据集根目录;transform指定对每个图像应该执行的预处理操作,例如调整大小、裁剪、翻转等。
数据集划分
对于机器学习任务,我们通常需要将数据集划分成训练集、验证集和测试集。在PyTorch中,我们可以使用torch.utils.data.random_split函数来完成数据集的划分。下面是一个示例代码:
from torch.utils.data import DataLoader, random_split
# Split the dataset into train and test sets
train_size = int(0.8 * len(dataset))
test_size = len(dataset) - train_size
train_dataset, test_dataset = random_split(dataset, [train_size, test_size])
# Split train dataset into train and validation sets
val_size = int(0.2 * len(train_dataset))
train_size = len(train_dataset) - val_size
train_dataset, val_dataset = random_split(train_dataset, [train_size, val_size])
在这个例子中,我们先使用random_split函数将原始数据集划分为训练集和测试集,在这里80%的数据用于训练,20%的数据用于测试。然后,我们再次使用random_split函数将训练集划分为训练集和验证集,其中80%的数据用于训练,20%的数据用于验证。
数据加载器
最后,我们可以使用数据加载器(DataLoader)来加载数据集。数据加载器负责将图像数据和标签封装成批量,并提供多线程方式加载数据以加速训练过程。下面是一个示例代码:
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=32, shuffle=False)
test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)
在这里,我们创建了三个数据加载器train_loader、val_loader 和 test_loader,它们分别对应训练集、验证集和测试集。batch_size参数指定了每个批次的大小,shuffle参数表示是否随机化输入数据(在训练集中设置为True,在验证集和测试集中设置为False)。
来源:https://juejin.cn/post/7223988948069302329
猜你喜欢
- 原文链接:https://vien.tech/article/157前言本文将介绍ubuntu系统下如何定时执行shell脚本、python
- 题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。思路:1、把每层节点的val值用list存好2、把每层节点存好:①计
- pytorch forwod函数在父类中的调用问题背景最近在研究Detetron2的代码结构时,发现有些网络代码里面没有forward函数,
- 初级的图像拼接为将两幅图像简单的粘贴在一起,仅仅是图像几何空间的转移与合成,与图像内容无关。高级图像拼接也叫作基于特征匹配的图像拼接,拼接时
- 很多人错误地认为ASP是简单、低效的代名词,认为ASP是低能的,不足挂齿的,也很简单,一学就会,一琢磨就精通。有人讲ASP不安全,写ASP的
- ASPError Object 这个新增的,内置与ASP 3.0中的对象提供了一个以往版本中没有的专门用来处理错误的对象,这样,我们来操纵错
- li {list-style-image: url(images/disc.gif);}li的这个样式定义是将列表项目使用图片来代替显示的小
- 本文实例讲述了Python实现简单的文本相似度分析操作。分享给大家供大家参考,具体如下:学习目标:1.利用gensim包分析文档相似度2.使
- Python 跟 Python3 完全就是两种语言1、 import caffe FAILED环境为 Ubuntu 16 cuda
- wlile循环while True表示永远为真,不管是什么条件都会向下执行,下面是写的一个例子。#!/usr/bin/env pythona
- 本文为大家分享了Python文本特征抽取与向量化的具体代码,供大家参考,具体内容如下假设我们刚看完诺兰的大片《星际穿越》,设想如何让机器来自
- 注入漏洞代码和分析<?php function customError($errno, $errstr, $errfile, $err
- Asp中Server.ScriptTimeOut属性需要注意的一点Server.ScriptTimeout 这个属性给定Asp脚
- 创建用户定义函数,它是返回值的已保存的 Transact-SQL 例程。用户定义函数不能用于执行一组修改全局数据库状态的操作。与系统函数一样
- 本文实例讲述了Python基于hashlib模块的文件MD5一致性加密验证。分享给大家供大家参考,具体如下:使用hashlib模块,可对文件
- 此处收集的是一些夺人心魄的创意广告牌,巧妙的构思十分值得大家观瞻.......超人归来 superman returnsNespressos
- 异常异常是程序发生错误的信号,程序一旦出错就会抛出异常,程序的运行随之终止。# 异常处理的三个特征- 异常的追踪信息- 异常的类型- 异常的
- 本文实例讲述了PHP实现对数组分页处理方法。分享给大家供大家参考,具体如下:最近用到了用数组数据分页,这里整理了一下,具体代码如下:<
- css实现的圆角矩形的方式很多,但要追求灵活型,上面的结构简单,看起来爽一点注意css所用的图片路径,已修改兼容ie6 ie7 ff ,IE
- 一、避免Firefox 背景图不显示的兼容问题,定义background 属性,先后顺序不能随意变动。background : backgr