参考: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的使用的更多相关文章

  1. LeNet-5 pytorch+torchvision+visdom

    # ====================LeNet-5_main.py=============== # pytorch+torchvision+visdom # -*- coding: utf- ...

  2. Linux服务器配置GPU版本的pytorch Torchvision TensorFlow

    最近在Linux服务器上配置项目,项目需要使用GPU版本的pytorch和TensorFlow,而且该项目内会同时使用TensorFlow的GPU和CPU. 在服务器上装环境,如果重新开始,就需要下载 ...

  3. 云服务器搭建anaconda pytorch torchvision

    (因为在普通用户上安装有些权限问题安装出错,所以我在root用户下相对容易安装,但是anaconda官网说可以直接在普通用户下安装,不过,在root下安装,其他用户也是能用的. 访问Anaconda官 ...

  4. Pytorch Torchvision Transform

    Torchvision.Transforms Transforms包含常用图像转换操作.可以使用Compose将它们链接在一起. 此外,还有torchvision.transforms.functio ...

  5. pytorch torchvision对图像进行变换

    class torchvision.transforms.Compose(转换) 多个将transform组合起来使用. class torchvision.transforms.CenterCrop ...

  6. pytorch ImageFolder的覆写

    在为数据分类训练分类器的时候,比如猫狗分类时,我们经常会使用pytorch的ImageFolder: CLASS torchvision.datasets.ImageFolder(root, tran ...

  7. PyTorch使用总览

    PyTorch使用总览 https://blog.csdn.net/u014380165/article/details/79222243 深度学习框架训练模型时的代码主要包含数据读取.网络构建和其他 ...

  8. Linux安装pytorch的具体过程以及其中出现问题的解决办法

    1.安装Anaconda 安装步骤参考了官网的说明:https://docs.anaconda.com/anaconda/install/linux.html 具体步骤如下: 首先,在官网下载地址 h ...

  9. docker挂载NVIDIA显卡运行pytorch

    本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃   写在前面: 请参考之前的文章安装好CentOS.NVIDIA相关驱动及软件.docker及 ...

随机推荐

  1. C# 动态添加类、动态添加类型、代码添加类型

    引用控件: DLL下载地址:http://pan.baidu.com/s/1nv2GUWL public class TypeCreator { public static Type Creator( ...

  2. js (jQuery)分组数据

    function getobjArr (data) { var result = []; data.HELMET.system = '系统分类' // console.log(data) $.each ...

  3. Conccrent中 Unsafe类原理 以及 原子类AutomicXX的原理以及对Unsafe类的使用

    Unsafe类的介绍 Java中基于操作系统级别的原子操作类sun.misc.Unsafe,它是Java中对大多数锁机制实现的最基础类.请注意,JDK 1.8和之前JDK版本的中sun.misc.Un ...

  4. vue的diff算法

    前言 我的目标是写一个非常详细的关于diff的干货,所以本文有点长.也会用到大量的图片以及代码举例,目的让看这篇文章的朋友一定弄明白diff的边边角角. 先来了解几个点... 1. 当数据发生变化时, ...

  5. 使用Visual Studio Team Services持续集成(四)——使用构建运行测试

    使用Visual Studio Team Services持续集成(四)--使用构建运行测试 使用构建来运行测试来验证集成是一个很好的实践. MyHealth.API.IntegrationTests ...

  6. Python 常用的正则表达式

    校验数字的相关表达式: 功能 表达式 数字 ^[0-9]*$ n位的数字 ^\d{n}$ 至少n位的数字 ^\d{n,}$ m-n位的数字 ^\d{m,n}$ 零和非零开头的数字 ^(0|[1-9][ ...

  7. VirtualBox网络连接方式

    VirtualBox图形界面下有四种网络接入方式,它们分别是: 1.NAT 网络地址转换模式(NAT,Network Address Translation) 2.Bridged Adapter 桥接 ...

  8. 使用Visual Studio Team Services敏捷规划和项目组合管理(四)——冲刺计划和任务板

    使用Visual Studio Team Services敏捷规划和项目组合管理(四)--冲刺计划和任务板 团队在sprint计划会议期间创建冲刺积压工作项,通常在冲刺的第一天召开该会议.每个冲刺都对 ...

  9. Redis内存数据库快速入门

    Redis简介 Redis是一个开源(BSD许可),内存数据结构存储,用作数据库,缓存和消息代理.它支持数据结构,如 字符串,散列,列表,集合,带有范围查询的排序集,位图,超级日志,具有半径查询和流的 ...

  10. shell编程—简介(一)

    1.shell概念 shell是一个用C语音编写的程序,他是用户使用Linux的桥梁 shell既是一种命令语音,又是一种程序设计语音 shell是指一种应用程序,这个应用程序提供一个界面,用户通过这 ...