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万+

将AAL图谱对应到Yeo7大网络中【原理,代码分析】

本文介绍了将AAL2图谱映射到Yeo7大功能网络的方法。通过整合皮层(Yeo2011)、小脑(Buckner2011)和纹状体(Choi2012)三个区域的功能网络图谱,采用投票机制确定每个AAL区域的网络归属。具体步骤包括:1)统计每个AAL区域体素在各网络图谱中的分布;2)选择体素数量最多的网络作为该区域的最终标签。该方法实现了从解剖结构到功能网络的映射,可获得120个AAL区域对应的7大功能网络标签。

yes666666的博客 2206

告别‘报错马拉松’:一份保姆级的Ubuntu 20.04编译OpenWrt 15.05环境配置与问题修复清单

本文提供了一份详细的Ubuntu 20.04编译OpenWrt 15.05的环境配置与问题修复指南,帮助开发者告别‘报错马拉松’。从基础环境搭建到典型报错分类与修复方案,再到高阶问题的深度修复,全面覆盖编译过程中可能遇到的各类问题,并提供自动化补丁脚本和Docker环境固化方案,确保编译过程高效顺畅。

weixin_33230433的博客 295

pytorch之ImageFolder

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

朴素.无恙的博客 6万+

MT6826SGT-STD-R绝对值编码器深度解析:精准控制+灵活编程

本文详细介绍MT品牌的高性能绝对值编码器——MT6826SGT-STD-R。:区别于传统增量式编码器,绝对值输出无需掉电归零,开机即获准确位置数据。的核心优势,结合应用场景与选型指南,为工程师提供一站式解决方案参考。MT6826SGT-STD-R是一款专为工业级精密控制设计的。该设备广泛应用于伺服系统、机器人关节校准、自动化产线等领域。:15bit分辨率实现细腻的位置反馈;:通过专用编写器可自定义多项关键参数;:优化电路设计,适应复杂电磁环境。

2501_93066786的博客 679

Pytorch加载数据集的方式总结

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

琥珀川 1万+

AES128加密算法开发(含源码)

本文详解了AES128加密算法的原理与C语言实现。AES128是当前广泛使用的对称加密标准,采用128位密钥和10轮变换,具有高安全性和高效性。文章从算法背景、核心概念(混淆与扩散)入手,详细解析了4×4状态矩阵表示、4个核心变换(字节替换、行移位、列混合、轮密钥加)以及密钥扩展过程。特别针对汽车电子应用场景,如ECU通信加密、车钥匙认证等,说明了AES128在资源受限环境中的优势。通过分步图解和原理剖析,帮助开发者深入理解这一加密标准的技术细节与实现方法。

汽车电子软件开发笔记 2918

最新CobaltStrike4.8/CobaltStrike4.9、CS4.9/CS4.8、 Windows/Linux/Mac版下载

Cobalt Strike是一款基于java的渗透测试神器,常被业界人称为CS神器。自3.0以后已经不在使用Metasploit框架而作为一个独立的平台使用,分为客户端与服务端,服务端是一个,客户端可以有多个,非常适合团队协同作战,多个攻击者可以同时连接到一个团队服务器上,共享攻击资源与目标信息和sessions,可模拟APT做模拟对抗,进行内网渗透。 Cobalt Strike集成了端口转发、服务扫描,自动化溢出,多模式端口监听,win exe木马生成,win dll木马生成,java木马生成,

weixin_43167326的博客 7972

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万+

中小公司无线组网实战:用一台H3C AC和普通三层交换,实现办公网AP统一管理

本文详细介绍了中小型企业如何利用H3C AC控制器与普通三层交换机实现无线AP统一管理的实战方案。通过VLAN规划、DHCP配置和AC控制器设置,构建经济高效的办公网络,解决信号覆盖和连接稳定性问题,特别适合50-200人规模的企业部署。

weixin_42531516的博客 382

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

059、肤色还原专项调优:记忆色、颜色偏好建模与主观评价标准

文章摘要:肤色还原调优的技术挑战与实践经验 本文系统探讨了手机影像中肤色还原的技术难点与解决方案。通过实际案例揭示了肤色还原的本质是记忆色与颜色偏好的博弈,而非单纯的技术指标达标。文章详细分析了记忆色的三大特性(高饱和、地域差异、场景依赖)和颜色偏好的数学建模方法,提出了基于YCbCr/Lab空间的参数化模型和代价函数设计。在评价体系方面,强调主观评价的重要性,并分享了专家评审、用户调研、场景覆盖的三级验证方法。最后总结了实战中的关键经验,包括肤色检测优化、过渡处理、动态范围管理及视频/拍照差异策略。文章指

sundong_81的博客 250

Python散点图(Scatter Plot):高阶分析、散点图矩阵、三维散点图及综合应用

散点图作为一种直观且功能强大的数据可视化工具,在数据分析中具有广泛的应用。通过观察散点图中数据点的分布模式,我们可以轻松地判断变量之间是否存在相关性,以及相关性的类型和强度。同时,散点图也是识别数据集中异常值的有效工具,无论是通过直观观察还是结合统计方法,都能帮助我们发现数据中的异常情况。掌握散点图的绘制和分析技巧,将使我们在数据探索和决策制定中更加得心应手。

SiArch的博客 1444

Pytorch——ImageFolder使用

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

qq_29774003的博客 9142

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

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万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

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

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

qq_73989746的博客 905

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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、付费专栏及课程。

余额充值