pytorch torchvision.ImageFolder的使用
参考:https://pytorch-cn.readthedocs.io/zh/latest/torchvision/torchvision-datasets/
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/.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


可见分成了cat和dog两类
import torchvision.datasets as dset
dataset = dset.ImageFolder('./data/dogcat_2') #没有transform,先看看取得的原始图像数据
print(dataset.classes) #根据分的文件夹的名字来确定的类别
print(dataset.class_to_idx) #按顺序为这些类别定义索引为0,...
print(dataset.imgs) #返回从所有文件夹中得到的图片的路径以及其类别
返回:
['cat', 'dog']
{'cat': , 'dog': }
[('./data/dogcat_2/cat/cat.12484.jpg', ), ('./data/dogcat_2/cat/cat.12485.jpg', ), ('./data/dogcat_2/cat/cat.12486.jpg', ), ('./data/dogcat_2/cat/cat.12487.jpg', ), ('./data/dogcat_2/dog/dog.12496.jpg', ), ('./data/dogcat_2/dog/dog.12497.jpg', ), ('./data/dogcat_2/dog/dog.12498.jpg', ), ('./data/dogcat_2/dog/dog.12499.jpg', )]
如果在数据下面又添加了一个类型'others',那么访问类型的时候返回的就是:
['cat', 'dog', 'others']
{'cat': , 'dog': , 'others': }
查看得到的图片数据:
#从返回结果可见得到的数据仍是PIL Image对象
print(dataset[])
print(dataset[][])
print(dataset[][]) #得到的是类别0,即cat
返回:
(<PIL.Image.Image image mode=RGB size=497x500 at 0x11D99A9B0>, )
<PIL.Image.Image image mode=RGB size=497x500 at 0x11DD24278>
然后定义一个对数据进行处理的transform:
#可以看出来此时得到的图片数据已经是处理过后的tensor数据了
print(dataset[][])
print(dataset[][].size()) #大小也是经过设定后的大小224
print(dataset[][]) #得到的是类别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([, , ])
pytorch torchvision.ImageFolder的使用的更多相关文章
- LeNet-5 pytorch+torchvision+visdom
# ====================LeNet-5_main.py=============== # pytorch+torchvision+visdom # -*- coding: utf- ...
- Linux服务器配置GPU版本的pytorch Torchvision TensorFlow
最近在Linux服务器上配置项目,项目需要使用GPU版本的pytorch和TensorFlow,而且该项目内会同时使用TensorFlow的GPU和CPU. 在服务器上装环境,如果重新开始,就需要下载 ...
- 云服务器搭建anaconda pytorch torchvision
(因为在普通用户上安装有些权限问题安装出错,所以我在root用户下相对容易安装,但是anaconda官网说可以直接在普通用户下安装,不过,在root下安装,其他用户也是能用的. 访问Anaconda官 ...
- Pytorch Torchvision Transform
Torchvision.Transforms Transforms包含常用图像转换操作.可以使用Compose将它们链接在一起. 此外,还有torchvision.transforms.functio ...
- pytorch torchvision对图像进行变换
class torchvision.transforms.Compose(转换) 多个将transform组合起来使用. class torchvision.transforms.CenterCrop ...
- pytorch ImageFolder的覆写
在为数据分类训练分类器的时候,比如猫狗分类时,我们经常会使用pytorch的ImageFolder: CLASS torchvision.datasets.ImageFolder(root, tran ...
- PyTorch使用总览
PyTorch使用总览 https://blog.csdn.net/u014380165/article/details/79222243 深度学习框架训练模型时的代码主要包含数据读取.网络构建和其他 ...
- Linux安装pytorch的具体过程以及其中出现问题的解决办法
1.安装Anaconda 安装步骤参考了官网的说明:https://docs.anaconda.com/anaconda/install/linux.html 具体步骤如下: 首先,在官网下载地址 h ...
- docker挂载NVIDIA显卡运行pytorch
本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 写在前面: 请参考之前的文章安装好CentOS.NVIDIA相关驱动及软件.docker及 ...
随机推荐
- TCP 三次握手与四次断开
三次握手建立连接 TCP连接是通过三次握手来连接的. 第一次握手 当客户端向服务器发起连接请求时,客户端会发送同步序列标号SYN到服务器,在这里我们设SYN为x,等待服务器确认,这时客户端的状态为SY ...
- Dynamics 365工作流报错:您无法登陆系统。原因可能是您的用户记录或您所属的业务部门在Microsoft Dynamics 365中已被禁用。
本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复265或者20170926可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me ...
- Wyn BI的机会在哪里:越靠近消费者的行业,比如零售、文娱和金融,信息化投入越大 ZT
近日,全球知名信息技术咨询公司IDC在网易云创大会上发布了<2018中国企业数字化发展报告>(下称报告).报告显示,近几年我国数字经济占GDP比重逐年增加,至2017年已经达到32.9%, ...
- C# 动态加载程序集信息
本文通过一个简单的实例,来讲解动态加载Dll需要的知识点.仅供学习分享使用,如有不足之处,还请指正. 在设计模式的策略模式中,需要动态加载程序集信息. 涉及知识点: AssemblyName类,完整描 ...
- Android项目实战(五十一):浅谈GreenDao
比较出名的数据库框架 GreenDao使用步骤: 1.app目录下的build.gradle文件 添加依赖 compile 'org.greenrobot:greendao:3.2.0' 顶部添加插件 ...
- 关于WPF中TextBox使用SelectAll无效的问题的解决办法
1.首先保证你设置的SelectionBrush不是透明的颜色或者和背景色相同 2.在使用SelectAll之前要保证Textox以及获取到焦点. this.textbox.SelectionBrus ...
- linux alias 用法
转自linux alias http://www.maomao365.com/?p=2597 : linux中命令别名设置: <span style="color:blue;font- ...
- 区块链会与io域名有什么关系
为什么区块链会与io域名有这么大的联系? 近几年,区块链成为各国央行到国内外各大商业银行.联合国.国际货币基金组织到许多国家政府研究机构讨论的热点,"区块链+"应用创新正在成为引领 ...
- 用好lua+unity,让性能飞起来——luajit集成篇/平台相关篇
luajit集成篇 大家都知道luajit比原生lua快,快在jit这三个字上. 但实际情况是,luajit的行为十分复杂.尤其jit并不是一个简单的把代码翻译成机器码的机制,背后有很多会影响性能的因 ...
- 简述KVM架构和Xen架构
暑假最后一篇更新,因为,,,明天我就回学校了. 以下均为个人理解,如果有不对的地方还望各位dalao不吝赐教. 虚拟化 虚拟化是通过Hypervisor程序实现的,Hypervisor的作用是将硬件虚 ...