Pytorch模型训练-----------数据集加载之ImageFolder之全过程

torchvision.datasets.ImageFolder使用详解 是一个通用的数据加载器,它要求我们以下面这种格式来组织数据集的训练、验证或者测试图片。对于上面的root,假设data文件夹在.py文件的同级目录中,那么root一般都是如下这种形式./data/train和./data/valid。... 阅读详情
AI摘要

本文详细介绍了如何使用PyTorch的ImageFolder数据加载器,包括参数解读、数据结构展示、如何处理原始图像和应用transform,以及如何构建训练数据集和使用Dataloader。重点展示了如何将PILImage转为张量并配合transform进行预训练数据准备。

数据集加载之ImageFolder

ImageFolder一个通用的数据加载器,数据集中的数据以以下方式组织

函数如下

ImageFolder(root, transform``=``None``, target_transform``=``None``, loader``=``default_loader)

参数解释

  • root 指定路径加载图片

  • transform:对PIL Image进行的转换操作,transform的输入是使用loader读取图片的返回对象

  • target_transform:对label的转换

  • loader:给定路径后如何读取图片,默认读取为RGB格式的PIL Image对象

label是按照文件夹名顺序排序后存成字典,即{类名:类序号(从0开始)},一般来说最好直接将文件夹命名为从0开始的数字,这样会和ImageFolder实际的label一致,如果不是这种命名规范,建议看看self.class_to_idx属性以了解label和文件夹名的映射关系

img

可见分成了cat和dog两类

import torchvision.datasets as dset
dataset = dset.ImageFolder('./data/dogcat_2') #没有transform,先看看取得的原始图像数据
print(dataset.classes)  #根据分的文件夹的名字来确定的类别
print(dataset.class_to_idx) #按顺序为这些类别定义索引为0,1...
print(dataset.imgs) #返回从所有文件夹中得到的图片的路径以及其类别

返回

['cat', 'dog']
{'cat': 0, 'dog': 1}
[('./data/dogcat_2/cat/cat.12484.jpg', 0), ('./data/dogcat_2/cat/cat.12485.jpg', 0), ('./data/dogcat_2/cat/cat.12486.jpg', 0), ('./data/dogcat_2/cat/cat.12487.jpg', 0), ('./data/dogcat_2/dog/dog.12496.jpg', 1), ('./data/dogcat_2/dog/dog.12497.jpg', 1), ('./data/dogcat_2/dog/dog.12498.jpg', 1), ('./data/dogcat_2/dog/dog.12499.jpg', 1)]

查看得到的图片数据:

#从返回结果可见得到的数据仍是PIL Image对象
print(dataset[0])
print(dataset[0][0])
print(dataset[0][1]) #得到的是类别0,即cat

返回:

(<PIL.Image.Image image mode=RGB size=497x500 at 0x11D99A9B0>, 0)
<PIL.Image.Image image mode=RGB size=497x500 at 0x11DD24278>
0

再通过transform变成张量

 data_transform = {
        "train": transforms.Compose([transforms.RandomResizedCrop(224),
                                     transforms.RandomHorizontalFlip(),
                                     transforms.ToTensor()
                                     ]),
        "val": transforms.Compose([transforms.Resize((224, 224)),  # cannot 224, must (224, 224)
                                   transforms.ToTensor()
                                   ])}

    train_dataset = datasets.ImageFolder(root=os.path.join(data_root, "train"),
                                         transform=data_transform["train"])
    
    print(train_dataset[0])
	print(train_dataset[0][0])
	print(train_dataset[0][1]) #得到的是类别0,即cat

得到

(tensor([[[0.3765, 0.3765, 0.3765,  ..., 0.3765, 0.3765, 0.3765],
         [0.3765, 0.3765, 0.3765,  ..., 0.3765, 0.3765, 0.3765],
         [0.3804, 0.3804, 0.3804,  ..., 0.3765, 0.3765, 0.3765],
         ...,
         [0.4941, 0.4941, 0.4902,  ..., 0.3804, 0.3765, 0.3765],
         [0.5098, 0.5098, 0.5059,  ..., 0.3804, 0.3765, 0.3765],
         [0.5098, 0.5098, 0.5059,  ..., 0.3804, 0.3765, 0.3765]],

        [[0.5686, 0.5686, 0.5686,  ..., 0.5843, 0.5804, 0.5804],
         [0.5686, 0.5686, 0.5686,  ..., 0.5843, 0.5804, 0.5804],
         [0.5725, 0.5725, 0.5725,  ..., 0.5843, 0.5804, 0.5804],
         ...,
         [0.5686, 0.5686, 0.5686,  ..., 0.5961, 0.5922, 0.5922],
         [0.5686, 0.5686, 0.5686,  ..., 0.5961, 0.5922, 0.5922],
         [0.5686, 0.5686, 0.5686,  ..., 0.5961, 0.5922, 0.5922]],

        [[0.4824, 0.4824, 0.4824,  ..., 0.4902, 0.4902, 0.4902],
         [0.4824, 0.4824, 0.4824,  ..., 0.4902, 0.4902, 0.4902],
         [0.4863, 0.4863, 0.4863,  ..., 0.4902, 0.4902, 0.4902],
         ...,
         [0.3647, 0.3686, 0.3804,  ..., 0.4824, 0.4784, 0.4784],
         [0.3451, 0.3490, 0.3608,  ..., 0.4824, 0.4784, 0.4784],
         [0.3451, 0.3490, 0.3608,  ..., 0.4824, 0.4784, 0.4784]]]), 0)
         
         省略
         图像Tensor [........]
         标签Tensor [0]

可以知道train_dataset[0]是一个tuple里面一个是张量一个是标量

    print(train_dataset[0][0].shape)
    print(train_dataset[0][1])

返回

torch.Size([3, 224, 224])
0

DataLoader产生批训练数据

for epoch in range(epoch_num):
        for image, label in train_loader:
			print("label: ", labels, labels.dtype)
            print("imges: ", images, images.dtype)

返回

label:  tensor([0]) torch.int64
    
imges:  tensor([[[[0.2275, 0.2275, 0.2235,  ..., 0.2196, 0.2196, 0.2196],
          [0.2275, 0.2275, 0.2235,  ..., 0.2196, 0.2196, 0.2196],
          [0.2235, 0.2235, 0.2235,  ..., 0.2157, 0.2157, 0.2157],
          ...,
          [0.2392, 0.2392, 0.2392,  ..., 0.2235, 0.2235, 0.2235],
          [0.2353, 0.2353, 0.2353,  ..., 0.2235, 0.2275, 0.2275],
          [0.2353, 0.2353, 0.2353,  ..., 0.2235, 0.2275, 0.2275]],

         [[0.2392, 0.2392, 0.2353,  ..., 0.2275, 0.2275, 0.2275],
          [0.2392, 0.2392, 0.2353,  ..., 0.2275, 0.2275, 0.2275],
          [0.2353, 0.2353, 0.2353,  ..., 0.2235, 0.2235, 0.2235],
          ...,
          [0.2275, 0.2275, 0.2314,  ..., 0.2196, 0.2196, 0.2196],
          [0.2235, 0.2235, 0.2275,  ..., 0.2196, 0.2196, 0.2196],
          [0.2235, 0.2235, 0.2275,  ..., 0.2196, 0.2196, 0.2196]],

         [[0.1961, 0.1961, 0.1961,  ..., 0.1765, 0.1765, 0.1765],
          [0.1961, 0.1961, 0.1961,  ..., 0.1765, 0.1765, 0.1765],
          [0.1922, 0.1922, 0.1922,  ..., 0.1725, 0.1725, 0.1725],
          ...,
          [0.1529, 0.1529, 0.1529,  ..., 0.1686, 0.1686, 0.1686],
          [0.1490, 0.1490, 0.1490,  ..., 0.1686, 0.1686, 0.1686],
          [0.1490, 0.1490, 0.1490,  ..., 0.1686, 0.1686, 0.1686]]]]) torch.float32

enumerate加载

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

可以用这个循环加载batchsize下面的每一元组,来得到相应的图片及标签

多元素赋值

当Python检测到等号左边是多个变量,右边是list或者是tuple之后,会自动执行list和tuple的解压,将它依次赋值给对应的元素:

l = [1, 2]
a, b = l

所以可以

for step, data in enumerate(train_bar):
            images, labels = data

最后nn.CrossEntropyLoss()计算loss回归

nn.CrossEntropyLoss()是nn.logSoftmax()和nn.NLLLoss()的整合,可以直接使用它来替换网络中的这两个操作。下面我们来看一下计算过程。

img

其中x是网络的输出向量,class是真实标签

举个例子,一个三分类网络对某个输入样本的输出为[-0.7715, -0.6205,-0.2562],该样本的真实标签为0,则用nn.CrossEntropyLoss()计算的损失为

img

参考链接讲的很好

参考二

【深度学习】datasets.ImageFolder 使用方法 阅读详情

相关推荐

ImageFolder 一个通用的数据加载器

torchvision.datasets的子类,用于加载数据。 默认数据集已经自觉按照要分配的类型分成了不同的文件夹,一种类型的文件夹下面只存放一种类型的图片。 举例说明: 数据分为cat和dog两类,各自在各自类的文件夹里。 import torchvision.datasets as dset dataset = dset.ImageFolder('./data/dogcat_2') #没有transform,先看看取得的原始图像数据 print(dataset.classes) #根据分的文件夹的

weixin_47032489的博客 3624

Pytorch——ImageFolder简单使用

一、ImageFolder ImageFolder会将目录中的文件夹名自动转化成序列,每个文件夹下会存储相同的一个类别,文件夹名为类名;当DataLoader载入时,标签自动就是整数序列了; 还是先查看一下用法: help(datasets.ImageFolder) class ImageFolder(DatasetFolder)函数构造: | ImageFolder(root, transform=None, target_transform=None, loader=<default_.

斯人若彩虹,遇上方知有! 8426

PyTorch使用datasets.ImageFolder加载ImageNet数据集及数据集相关处理

PyTorch使用datasets.ImageFolder加载ImageNet数据集及数据集相关处理1. 前言2. ImageNet数据集处理2.1 数据下载 (ILSVRC-2012) 1. 前言 Large Scale Visual Recognition Challenge (ILSVRC),大尺度视觉识别挑战是用于评估用于大尺度目标检测与目标分类的算法的一个大型图像竞赛。其数据集就是我们常说的ImageNet数据集,包括1000个类别共1281167张带注释(标签)的训练集图片,50000张验证集图

风筝大晒的博客 2万+

torchvision.datasets.ImageFolder()使用详解

一、数据集组织方式 ImageFolder是一个通用的数据加载器,它要求我们以下面这种格式来组织数据集的训练、验证或者测试图片。 root/dog/xxx.png root/dog/xxy.png root/dog/xxz.png root/cat/123.png root/cat/nsdf3.png root/cat/asd932_.png 对于上面的root,假设data文件夹在.py文件的同级目录中,那么root一般都是如下这种形式:./data/train 和 ./data/valid

Drug discovery 5万+

pytorch读取数据集(分类文件夹加载)—ImageFolder()

马上本科毕业了,毕业设计内容和图像深度学习有关,数据集在网上找了很久才找到,找到的数据集按类别存放在相应文件夹、没有标签文件。我不知道怎么读取,在优快云上找了好久,只有很少的文章里提到了文件夹读取,但是也没有详细说明,大多数都是用标签读取的。 而且优快云上将深度学习入门的博客大都直接用MNIST等一些可以直接使用的数据集,很少讲用自己的数据集的。 现在我的问题解决了,自己写一...

zzy_pphz的博客 1万+

Pytorch加载图片数据集的两种方式

在Pytorch中加载图片数据集一般有两种方法。 第一种是使用 torchvision中的datasets.ImageFolder来读取图片然后用 DataLoader来并行加载,适合图片分类问题,简单但不灵活; 第二种是通过继承 torch.utils.data.Dataset 实现用户自定义读取数据集然后用 DataLoader来并行加载,较为灵活。下面分别介绍一下。

weixin_43917574的博客 1万+

pytorch不加载fc_Pytorch自己加载单通道图片用作数据集训练的实例

pytorch 在torchvision包里面有很多的的打包好的数据集,例如minist,Imagenet-12,CIFAR10 和CIFAR100。在torchvision的dataset包里面,用的时候直接调用就行了。具体的调用格式可以去看文档(目前好像只有英文的)。网上也有很多源代码。不过,当我们想利用自己制作的数据集来训练网络模型时,就要有自己的方法了。pytorch在torchvisio...

weixin_39762838的博客 212

pytorch之ImageFolder使用详解

今天小编就为大家分享一篇pytorch之ImageFolder使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

pytorch加载自己的图片数据集的两种方法

pytorch加载图片数据集有两种方法。 1.ImageFolder 适合于分类数据集,并且每一个类别的图片在同一个文件夹, ImageFolder加载的数据集, 训练数据为文件件下的图片, 训练标签是对应的文件夹, 每个文件夹为一个类别 在Flower_Orig_dataset文件夹下有flower_orig 和 sunflower这两个文件夹, 这两个文件夹下放着同一个类别的图片。 使用 ImageFolder 加载的图片, 就会返回图片信息和对应的label信息, 但是label信息是根据文件

DL猿 2万+

STM32+ESP8266接入OneNet的MQTT嵌入式实现

MQTT是一种轻量级发布/订阅模式的消息传输协议,广泛应用于资源受限的物联网终端设备通信。其基于TCP/IP栈构建,具备低带宽占用、小代码体积和高可靠性等技术优势,特别适合STM32等MCU与Wi-Fi模组协同工作的边缘节点场景。在实际工程中,需结合AT指令集控制ESP8266完成Wi-Fi连接、TCP建链及MQTT会话管理,并通过环形缓冲区、空闲中断检测等机制保障UART异步通信稳定性。本文围绕STM32F103与ESP8266硬件协同、OneNet平台对接、JSON消息解析与OLED状态反馈等关键环节,

yhn456789的博客 1037

RTC 实时时钟实验

如果在 RTC_CR 寄存器中设置了相应的允许位,则在每个TR_CLK 周期中 RTC 产生一个中断(秒中断)。void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data) // 往备份区域写用户数据的函数 (这个函数的第一个参数就是寄存器的标号了,这个是通过宏定义定义的)存储在 RTC_ALR 寄存器中的可编程时间相比较,如果 RTC_CR 控制寄存器中设置了相应允许位,比较匹配时将产生一个闹钟中断。寄存器操作完成,并同步之后,设置秒钟中断。

m0_55996456的博客 1205

pytorch之ImageFolder

pytorch之ImageFolder torchvision已经预先实现了常用的Dataset,包括前面使用过的CIFAR-10,以及ImageNet、COCO、MNIST、LSUN等数据集,可通过诸如torchvision.datasets.CIFAR10来调用。在这里介绍一个会经常使用到的Dataset——ImageFolder。ImageFolder假设所有的文件按文件夹保存,每个文件夹下...

朴素.无恙的博客 6万+

高分系列卫星轨道、传感器参数等信息

遥感卫星数据简介-高分系列

中遥科 3309

Pytorch加载数据集的方式总结

目前我们有自己制作的数据以及数据标签,但是有时候感觉不太适合直接用Pytorch自带加载数据集的方法。我们可以自己来重写定义一个类,这个类继承于,同时我们需要重写这个类里面的两个方法_getitem__()和__len()__函数。如下所示。这两种方法如何构造以及具体的细节可以查看其他的博客。len方法必须返回数据的长度,getitem方法必须返回数据以及标签。通过上述的程序,我们构造了一个数据加载器torch_data,但是还是不能直接传入网络中。接下来需要构造数据装载器,产生可迭代的数据。.......

琥珀川 1万+

关于AD中如何绘制原理图及其封装

AD中如何绘制原理图及其封装 题记:这是一个比较基础的知识,之所以我打算写一篇这样的笔记,主要是因为在日常生活中,我极少绘制特殊模块或芯片原理图及其封装。久而久之就忘记咋画了,有时需要画封装的时候又想不起来,网上的资料虽然一堆堆的,但往往只是仅原理图的绘制,或者是仅封装的绘制。为此我写一篇这样的笔记,记录绘制原理图及其封装的一条龙服务,感觉这对我而言尤为重要。 本文分为三大板块,依次是原理图的绘制、封装的绘制、二者的联立 第一板块——原理图的绘制 原理图的建立 第二板块——封装的绘制 第三板块——二者的

weixin_51130221的博客 7万+

STM32 SAES硬件加密协处理器全模式工程实践指南

AES(高级加密标准)是嵌入式系统中最基础且关键的对称密码算法,其硬件加速实现直接影响安全、性能与功耗平衡。Secure AES Coprocessor(SAES)作为STMicroelectronics在STM32U5等高安全MCU中集成的专用密码协处理器,不仅支持标准ECB/CBC/CTR模式,更原生兼容GCM和CCM等认证加密模式,具备抗侧信道、密钥保护与DMA卸载能力。理解其寄存器状态机(CHMOD/MODE/CPHASE)、NPBLB数据对齐机制及GCM四阶段编程范式,是规避Tag校验失败、IV错

weixin_42311427的博客 76

Pytorch中ImageFolder的使用,如何使用Pytorch加载本地Imagenet的训练集与验证集,Imagenet 2012验证集的分类

Pytorch中ImageFolder的使用,如何使用Pytorch加载本地Imagenet的训练集与验证集 torchvision 中有一个常用的数据集类 ImageFolder,它假定了数据集是以如下方式构造的: root/ants/xxx.png root/ants/xxy.jpeg root/ants/xxz.png . . . root/bees/123.jpg root/bees/ns...

weixin_41466947的博客 1万+

电力系统实时仿真技术:从硬件在环到主流平台实践

实时仿真是一种基于高性能计算硬件,在严格时间约束下模拟物理系统动态行为的关键技术。其核心原理在于通过硬实时计算,确保仿真步长内的模型求解与输出时间严格同步,从而构建高保真的虚拟测试环境。这项技术的核心价值在于为电力电子、新能源并网等复杂系统的研发提供了无风险的“数字沙盘”,能够安全地验证控制器逻辑、保护装置动作及系统稳定性。在工程实践中,硬件在环测试通过连接虚拟模型与真实硬件,形成了控制器硬件在环和功率硬件在环两大主流应用场景,广泛应用于设备研发、电网安全分析和人员培训。本文聚焦于电力系统领域,深入解析了实

weixin_30952479的博客 420

pytorch图像处理:读取数据集Dataset和ImageFolder

https://blog.csdn.net/weixin_42147780/article/details/102683053?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160385383319725255519967%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=160385383319725255519967&biz_

iotflh的博客 7706

【服务器电源架构与关键技术发展趋势】AI数据中心迅猛发展,服务器电源如何演变?

功率级跃升:机柜功率从 100kW 向 1MW 级发展,供电架构采用 HVDC + 固态变压器(SST),省去传统 UPS、PFC 环节; 母线电压升级:从 48V 向 400V→800V 演进,配套 AI 电弧检测、智能运维解决高压安全与维护难题; 能效(PUE)提升:目标 PUE<1.3,通过液冷 CDU 替代传统风冷,可将 PUE 降至 1.16(传统 AI 集群 PUE 达 1.6); 拓扑控制复杂化:功率拓扑从单相→三相、单级→多交错结构,适配高功率需求; 安全维度扩展:新增网络安全防护需求。

昔时扬尘处 1451

【ROS】ROS2导航Nav2:简介、安装、测试效果、错误处理

在ROS2中自动导航使用Nav2来实现。Nav2 使用几个独立的模块化服务,通过 ROS 2接口(例如动作服务器或服务)与行为树 (BT) 通信。Nav2 输入包括:TF转换、一个地图源、一个行为树 (BT) XML 文件和相关的传感器数据源;Nav2 输出速度命令;Nav2 支持多种机器人,比如:四足机器人、履带机器人、轮式机器人等。

郭老二 5083

Pytorch——ImageFolder使用

ImageFolder是一个通用的数据加载器,数据集应当按照指定的格式进行存储。 1 数据集构造方式 比如我们的数据集一共包括两个类别:cat、dog,每个类别包括四张图片。所有的图片按文件夹保存,每个文件夹下存储同一个类别的图片,文件夹名为类名。 2 ImageFolder 2.1 调用 import torchvision.datasets dataset=ImageFo...

qq_29774003的博客 9142

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

pytorch Dataset 的ImageFolder

转自来源:优快云 原文:https://blog.csdn.net/TH_NUM/article/details/80877435 介绍常用的pytorch Dataset 里面的ImageFolder,实现和https://blog.csdn.net/TH_NUM/article/details/80877196很相似。 ImageFolder假设所有的文件按文件夹保存好,每个文件夹下面存贮同...

律己且好学,才能保证不坠入愤世嫉俗之列。 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

如何使用 PyTorch 的 ImageFolder 进行数据集加载:关键在于数据集的目录结构要符合其要求,

使用加载图像数据集,关键在于数据集的目录结构要符合其要求,即每个类别对应一个子文件夹。在项目实践中,合理划分数据集、进行适当的数据增强和归一化处理,能够显著提升模型的训练效果。同时,要根据实际情况选择合适的数据集划分方式和数据增强策略,避免过度增强导致模型过拟合,或者增强不足导致模型泛化能力差。通过以上步骤,大家可以在自己的深度学习项目中灵活运用,轻松加载和处理图像数据集,为模型训练打下坚实的基础。希望本文对大家有所帮助,欢迎在评论区分享使用经验和遇到的问题。

qq_73989746的博客 905

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Pytorch 加载图像数据(ImageFolder和Dataloader)

Pytorch加载图像数据集需要两步,首先需要使用**torchvision.datasets.ImageFolder()**读取图像,然后再使用**torch.utils.data.DataLoader()**加载数据集。

陶将的博客 1万+

【单点知识】基于实例讲解PyTorch中的ImageFolder类

ImageFolder专题讲解

使者大牙ℂypher的博客 3349
上一篇: ldconfig配置动态链接路径
下一篇: c++面试知识点-------------(一)
黑猫爱小鹿
博客等级 码龄8年 1万+粉丝 205原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值