pytorch torchvision.ImageFolder的用法介绍


Posted in Python onFebruary 20, 2020

torchvision.datasets

Datasets 拥有以下API:

__getitem__

__len__

Datasets都是 torch.utils.data.Dataset的子类,所以,他们也可以通过torch.utils.data.DataLoader使用多线程(python的多进程)。

举例说明:

torch.utils.data.DataLoader(coco_cap, batch_size=args.batchSize, shuffle=True, num_workers=args.nThreads)

在构造函数中,不同的数据集直接的构造函数会有些许不同,但是他们共同拥有 keyword 参数。

transform: 一个函数,原始图片作为输入,返回一个转换后的图片。

target_transform - 一个函数,输入为target,输出对其的转换。例子,输入的是图片标注的string,输出为word的索引。

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

既其默认你的数据集已经自觉按照要分配的类型分成了不同的文件夹,一种类型的文件夹下面只存放一种类型的图片

运行命令为:

import torchvision.datasets as dset

dset.ImageFolder(root="root folder path", [transform, target_transform])

root : 指定图片存储的路径,在下面的例子中是'./data/dogcat_2'

transform: 一个函数,原始图片作为输入,返回一个转换后的图片。

target_transform - 一个函数,输入为target,输出对其的转换。例子,输入的是图片标注的string,输出为word的索引。

有以下成员变量:

self.classes - 用一个list保存 类名

self.class_to_idx - 类名对应的 索引

self.imgs - 保存(img-path, class) tuple的list

即后面可以通过查看返回的数据集对象来查看相应的值,下面举例说明:

图片为:

pytorch torchvision.ImageFolder的用法介绍

可见分成了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)]

如果在数据下面又添加了一个类型'others',那么访问类型的时候返回的就是:

['cat', 'dog', 'others']
{'cat': 0, 'dog': 1, 'others': 2}

查看得到的图片数据:

#从返回结果可见得到的数据仍是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:

#可以看出来此时得到的图片数据已经是处理过后的tensor数据了
print(dataset[0][0])
print(dataset[0][0].size()) #大小也是经过设定后的大小224
print(dataset[0][1]) #得到的是类别0,即cat

返回:

tensor([[[-0.7412, -0.7490, -0.7725, ..., 0.3176, 0.3412, 0.3725],
   [-0.7333, -0.7412, -0.7882, ..., 0.3255, 0.3647, 0.4039],
   [-0.7098, -0.7569, -0.8039, ..., 0.3255, 0.3725, 0.4039],
   ...,
   [ 0.3961, 0.3961, 0.4039, ..., 0.2627, 0.2627, 0.2549],
   [ 0.4196, 0.4039, 0.4118, ..., 0.2549, 0.2392, 0.2314],
   [ 0.4275, 0.4275, 0.4431, ..., 0.2314, 0.2314, 0.2235]],

  [[-0.7412, -0.7490, -0.7725, ..., 0.3882, 0.3725, 0.3569],
   [-0.7333, -0.7412, -0.7882, ..., 0.3961, 0.3961, 0.3882],
   [-0.7098, -0.7569, -0.8039, ..., 0.3882, 0.4039, 0.3882],
   ...,
   [ 0.0431, 0.0510, 0.0667, ..., -0.0824, -0.0824, -0.0902],
   [ 0.0510, 0.0431, 0.0588, ..., -0.0824, -0.1059, -0.1137],
   [ 0.0353, 0.0353, 0.0510, ..., -0.0902, -0.1059, -0.1216]],

  [[-0.8353, -0.8431, -0.8667, ..., 0.3255, 0.3255, 0.3255],
   [-0.8196, -0.8275, -0.8824, ..., 0.3333, 0.3490, 0.3569],
   [-0.7804, -0.8353, -0.8667, ..., 0.3333, 0.3569, 0.3569],
   ...,
   [-0.2863, -0.2784, -0.2627, ..., -0.3569, -0.3569, -0.3647],
   [-0.2549, -0.2706, -0.2549, ..., -0.3569, -0.3804, -0.3882],
   [-0.2235, -0.2471, -0.2392, ..., -0.3569, -0.3804, -0.4039]]])
torch.Size([3, 224, 224])

以上这篇pytorch torchvision.ImageFolder的用法介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现问号表达式(?)的方法
Nov 27 Python
Python3使用requests包抓取并保存网页源码的方法
Mar 15 Python
Python编程中对super函数的正确理解和用法解析
Jul 02 Python
浅析Python的web.py框架中url的设定方法
Jul 11 Python
python如何把嵌套列表转变成普通列表
Mar 20 Python
vue.js实现输入框输入值内容实时响应变化示例
Jul 07 Python
Python中常用的内置方法
Jan 28 Python
详解python爬虫系列之初识爬虫
Apr 06 Python
python实现远程控制电脑
May 23 Python
Python模块、包(Package)概念与用法分析
May 31 Python
Django QuerySet查询集原理及代码实例
Jun 13 Python
Anaconda配置各版本Pytorch的实现
Aug 07 Python
详解python常用命令行选项与环境变量
Feb 20 #Python
用什么库写 Python 命令行程序(示例代码详解)
Feb 20 #Python
在 Linux/Mac 下为Python函数添加超时时间的方法
Feb 20 #Python
Python os模块常用方法和属性总结
Feb 20 #Python
Python requests获取网页常用方法解析
Feb 20 #Python
pytorch实现保证每次运行使用的随机数都相同
Feb 20 #Python
Python argparse模块使用方法解析
Feb 20 #Python
You might like
基于mysql的bbs设计(一)
2006/10/09 PHP
php递归删除目录下的文件但保留的实例分享
2014/05/10 PHP
javascript 装载iframe子页面,自适应高度
2009/03/20 Javascript
Javascript remove 自定义数组删除方法
2009/10/20 Javascript
EXTjs4.0的store的findRecord的BUG演示代码
2013/06/08 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
jQuery控制TR显示隐藏的三种常用方法
2014/08/21 Javascript
JS 作用域与作用域链详解
2015/04/07 Javascript
JavaScript中的anchor()方法使用详解
2015/06/08 Javascript
angularjs学习笔记之三大模块(modal,controller,view)
2015/09/26 Javascript
jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
2015/12/12 Javascript
Node 代理访问的实现
2019/09/19 Javascript
vue实现一个6个输入框的验证码输入组件功能的实例代码
2020/06/29 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
JSON stringify方法原理及实例解析
2020/10/23 Javascript
js实现验证码干扰(动态)
2021/02/23 Javascript
[40:06]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第一场
2018/04/04 DOTA
Tensorflow的可视化工具Tensorboard的初步使用详解
2018/02/11 Python
对Python中数组的几种使用方法总结
2018/06/28 Python
解决安装python库时windows error5 报错的问题
2018/10/21 Python
python 三元运算符使用解析
2019/09/16 Python
基于django micro搭建网站实现加水印功能
2020/05/22 Python
Python学习之time模块的基本使用
2021/01/17 Python
Doyoueven官网:澳大利亚健身服饰和配饰品牌
2019/03/24 全球购物
办公室主任岗位职责
2013/11/08 职场文书
优秀幼教自荐信
2014/02/03 职场文书
生物科学专业职业规划书范文
2014/02/11 职场文书
《夸父追日》教学反思
2014/02/26 职场文书
党员自我评议个人对照检查材料
2014/09/16 职场文书
县政府领导班子四风问题对照检查材料思想汇报
2014/09/26 职场文书
大学生自荐材料范文
2014/12/30 职场文书
甲午大海战观后感
2015/06/02 职场文书
电影雷锋观后感
2015/06/10 职场文书
PostgreSQL将数据加载到buffer cache中操作方法
2021/04/16 PostgreSQL
上手简单,功能强大的Python爬虫框架——feapder
2021/04/27 Python
java实现面板之间切换功能
2022/06/10 Java/Android