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脚本处理空格的方法
Aug 08 Python
python中实现精确的浮点数运算详解
Nov 02 Python
python实现自动发送邮件发送多人、群发、多附件的示例
Jan 23 Python
django解决跨域请求的问题详解
Jan 20 Python
华为2019校招笔试题之处理字符串(python版)
Jun 25 Python
如何安装并使用conda指令管理python环境
Jul 10 Python
简单了解python gevent 协程使用及作用
Jul 22 Python
Python操作SQLite/MySQL/LMDB数据库的方法
Nov 07 Python
Jupyter notebook 远程配置及SSL加密教程
Apr 14 Python
Django 解决由save方法引发的错误
May 21 Python
python 识别登录验证码图片功能的实现代码(完整代码)
Jul 03 Python
python如何设置静态变量
Sep 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
造势之举?韩国总统候选人发布《星际争霸》地图
2017/04/22 星际争霸
一个ftp类(ini.php)
2006/10/09 PHP
图象函数中的中文显示
2006/10/09 PHP
PHP 文件上传功能实现代码
2009/06/24 PHP
PHP 强制性文件下载功能的函数代码(任意文件格式)
2010/05/26 PHP
php下连接ftp实现文件的上传、下载、删除文件实例代码
2010/06/03 PHP
PHP IF ELSE简化/三元一次式的使用
2011/08/22 PHP
Zend的AutoLoad机制介绍
2012/09/27 PHP
PHP写日志的实现方法
2014/11/05 PHP
PHP的伪随机数与真随机数详解
2015/05/27 PHP
js 提交和设置表单的值
2008/12/19 Javascript
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
2011/09/28 Javascript
jQuery实现的网页竖向菜单效果代码
2015/08/26 Javascript
基于vue实现多引擎搜索及关键字提示
2017/03/16 Javascript
JavaScript用二分法查找数据的实例代码
2017/06/17 Javascript
基于Bootstrap模态对话框只加载一次 remote 数据的解决方法
2017/07/09 Javascript
20170918 前端开发周报之JS前端开发必看
2017/09/18 Javascript
vue遍历对象中的数组取值示例
2019/11/07 Javascript
JS关闭子窗口并且刷新上一个窗口的实现示例
2020/03/10 Javascript
用js编写留言板
2020/03/17 Javascript
vue3中轻松实现switch功能组件的全过程
2021/01/07 Vue.js
举例讲解Python中的身份运算符的使用方法
2015/10/13 Python
python快速建立超简单的web服务器的实现方法
2018/02/17 Python
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
2018/10/22 Python
Django实现CAS+OAuth2的方法示例
2019/10/30 Python
Python集合操作方法详解
2020/02/09 Python
突破canvas语法限制 让他支持链式语法
2012/12/24 HTML / CSS
美国礼品卡商城: Gift Card Mall
2017/08/25 全球购物
应届毕业生自我评价分享
2013/12/15 职场文书
总经理助理的职责
2014/03/14 职场文书
满月酒主持词
2014/03/27 职场文书
科技工作者先进事迹
2014/08/16 职场文书
幼儿园见习报告范文
2014/10/30 职场文书
企业2014年度工作总结
2014/12/10 职场文书
成本会计岗位职责
2015/02/03 职场文书
2015年全民创业工作总结
2015/07/23 职场文书