zoukankan      html  css  js  c++  java
  • 超简单!pytorch入门教程(四):准备图片数据集

    在训练神经网络之前,我们必须有数据,作为资深伸手党,必须知道以下几个数据提供源:

    一、CIFAR-10


    CIFAR-10图片样本截图

    CIFAR-10是多伦多大学提供的图片数据库,图片分辨率压缩至32x32,一共有10种图片分类,均进行了标注。适合监督式学习。CIFAR-10数据下载页面

    二、ImageNet


    imagenet首页

    ImageNet首页

    三、ImageFolder


    imagefolder首页

    ImageFolder首页

    四、LSUN Classification


    LSUN Classification

    LSUN 图片下载地址

    五、COCO (Captioning and Detection)


    coco首页

    COCO首页地址

    六、我们进入正题

    为了方便加载以上五种数据库的数据,pytorch团队帮我们写了一个torchvision包。使用torchvision就可以轻松实现数据的加载和预处理。

    我们以使用CIFAR10为例:

    导入torchvision的库:

    import torchvision

    import torchvision.transforms as transforms  # transforms用于数据预处理

    使用datasets.CIFAR10()函数加载数据库。CIFAR10有60000张图片,其中50000张是训练集,10000张是测试集。

    #训练集,将相对目录./data下的cifar-10-batches-py文件夹中的全部数据(50000张图片作为训练数据)加载到内存中,若download为True时,会自动从网上下载数据并解压trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=False, transform=None)

    下面简单讲解root、train、download、transform这四个参数

    1.root,表示cifar10数据的加载的相对目录

    2.train,表示是否加载数据库的训练集,false的时候加载测试集

    3.download,表示是否自动下载cifar数据集

    4.transform,表示是否需要对数据进行预处理,none为不进行预处理

    由于美帝路途遥远,靠命令台进程下载100多M的数据速度很慢,所以我们可以自己去到cifar10的官网上把CIFAR-10 python version下载下来,然后解压为cifar-10-batches-py文件夹,并复制到相对目录./data下。(若设置download=True,则程序会自动从网上下载cifar10数据到相对目录./data下,但这样小伙伴们可能要等一个世纪了),并对训练集进行加载(train=True)。


    如图所示,在脚本文件下建一个data文件夹,然后把数据集文件夹丢到里面去就好了,注意cifar-10-batches-py文件夹名字不能自己任意改。

    我们在写完上面三行代码后,在写一行print一下trainset的大小看看:

    print len(trainset)

    #结果:50000

    我们在训练神经网络时,使用的是mini-batch(一次输入多张图片),所以我们在使用一个叫DataLoader的工具为我们将50000张图分成每四张图一分,一共12500份的数据包。

    #将训练集的50000张图片划分成12500份,每份4张图,用于mini-batch输入。shffule=True在表示不同批次的数据遍历时,打乱顺序(这个需要在训练神经网络时再来讲)。num_workers=2表示使用两个子进程来加载数据

    import torch

    trainloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=False, num_workers=2)

    那么我们就写下了这几行代码:


    print的结果为50000和12500

    下面我们需要对数据进行预处理,什么是预处理?为什么要预处理?如果不知道的小盆友可以看看下面几个链接,或许对你有帮助。神经网络为什么要归一化深度学习-----数据预处理。还无法理解也没关系,只要记住,预处理会帮助我们加快神经网络的训练。

    在pytorch中我们预处理用到了transforms函数:

    transform=transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),])

    compose函数会将多个transforms包在一起。

    我们的transforms有好几种,例如transforms.ToTensor(), transforms.Scale()等,完整列表在。好好学习吧!

    我只讲现在用到了两种:

    1.ToTensor是指把PIL.Image(RGB) 或者numpy.ndarray(H x W x C) 从0到255的值映射到0到1的范围内,并转化成Tensor格式。

    2.Normalize(mean,std)是通过下面公式实现数据归一化

    channel=(channel-mean)/std

    那么经过上面两个转换一折腾,我们的数据中的每个值就变成了[-1,1]的数了。


    1到22行,我们从硬盘中读取数据,并将数据预处理(第13行,transform=transform),然后转换成4张图为一批的数据结构。26行到47行,为我们显示出一个图片例子,可有可无,不再作代码解释。

    源代码下载

    更多torchvision加载其他数据库方法



    作者:Zen_君
    链接:http://www.jianshu.com/p/8da9b24b2fb6
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    filter()函数
    递归算法
    日志模块nb_log
    sys.argv[]简单阐述
    DB2中字符、数字和日期类型之间的转换
    Java 连接 Hive的样例程序及解析
    对hadoop namenode -format执行过程的探究
    想要成为牛人、大佬,那请至少拥有这12项技能!
    形象决定你的收入,别问为什么!
    年轻人,能用钱解决的,绝不要花时间(转)
  • 原文地址:https://www.cnblogs.com/CATHY-MU/p/7760992.html
Copyright © 2011-2022 走看看