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实现的DES加密算法和3DES加密算法实例
Jun 03 Python
python和bash统计CPU利用率的方法
Jul 10 Python
python解决汉字编码问题:Unicode Decode Error
Jan 19 Python
python 如何快速找出两个电子表中数据的差异
May 26 Python
Python脚本按照当前日期创建多级目录
Mar 01 Python
python3的数据类型及数据类型转换实例详解
Aug 20 Python
python定时任务 sched模块用法实例
Nov 04 Python
python ftplib模块使用代码实例
Dec 31 Python
Python logging日志库空间不足问题解决
Sep 14 Python
解决Python 写文件报错TypeError的问题
Oct 23 Python
Pycharm安装Qt Design快捷工具的详细教程
Nov 18 Python
Python中for后接else的语法使用
May 18 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
一个php Mysql类 可以参考学习熟悉下
2009/06/21 PHP
盘点PHP和ASP.NET的10大对比!
2015/12/24 PHP
PHP动态生成指定大小随机图片的方法
2016/03/25 PHP
Laravel 实现在Blade模版中使用全局变量代替路径的例子
2019/10/22 PHP
laravel model 两表联查示例
2019/10/24 PHP
通过js脚本复制网页上的一个表格的不错实现方法
2006/12/29 Javascript
基于JQuery的一句代码实现表格的简单筛选
2010/07/26 Javascript
createElement与createDocumentFragment的点点区别小结
2011/12/19 Javascript
JavaScript:Div层拖动效果实例代码
2013/08/06 Javascript
JQuery弹出层示例可自定义
2014/05/19 Javascript
jQuery如何防止这种冒泡事件发生
2015/02/27 Javascript
JS自动倒计时30秒后按钮才可用(两种场景)
2015/08/31 Javascript
日常收藏的jquery技巧
2015/12/02 Javascript
简单介绍JavaScript数据类型之隐式类型转换
2015/12/28 Javascript
node.js学习之base64编码解码
2016/10/21 Javascript
JS打开摄像头并截图上传示例
2017/02/18 Javascript
分析JS中this引发的bug
2017/12/12 Javascript
jQuery判断自定义属性data-val用法示例
2019/01/07 jQuery
React学习之受控组件与数据共享实例分析
2020/01/06 Javascript
JS变量提升原理与用法实例浅析
2020/05/22 Javascript
Vue.js暴露方法给WebView的使用操作
2020/09/07 Javascript
python实现复制整个目录的方法
2015/05/12 Python
Python中的变量和作用域详解
2016/07/13 Python
Python处理PDF及生成多层PDF实例代码
2017/04/24 Python
Tensorflow 实现分批量读取数据
2020/01/04 Python
如何基于windows实现python定时爬虫
2020/05/01 Python
详解vscode实现远程linux服务器上Python开发
2020/11/10 Python
澳大利亚波西米亚风连衣裙在线商店:Fortunate One
2019/04/01 全球购物
医院护士求职自荐信格式
2013/09/21 职场文书
学生打架检讨书大全
2014/01/23 职场文书
大学生素质拓展活动方案
2014/02/11 职场文书
评析教师个人的自我评价
2014/02/19 职场文书
机械机修工岗位职责
2014/08/03 职场文书
2014年前台接待工作总结
2014/12/05 职场文书
标会主持词应该怎么写?
2019/08/15 职场文书
MySQL基础(一)
2021/04/05 MySQL