pytorch入门教程 | 第四章:准备图片数据集

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

1 CIFAR-10

CIFAR-10图片样本截图

CIFAR-10是多伦多大学提供的图片数据库,图片分辨率压缩至32x32,一共有10种图片分类,均进行了标注。适合监督式学习。CIFAR-10数据下载页面:http://www.cs.toronto.edu/~kriz/cifar.html

2 ImageNet

imagenet首页

ImageNet首页:http://image-net.org/

3

ImageFolder

imagefolder首页

ImageFolder首页:https://www.tugraz.at/institute/icg/home/

4

LSUN Classification

LSUN Classification

LSUN 图片下载地址:

http://lsun.cs.princeton.edu/2016/

5

COCO (Captioning and Detection)

coco首页

COCO首页地址:

http://mscoco.org/

6

我们进入正题

为了方便加载以上五种数据库的数据,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

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

在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行,为我们显示出一个图片例子,可有可无,不再作代码解释。

原文发布于微信公众号 - 人工智能LeadAI(atleadai)

原文发表时间:2017-09-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

搭建python机器学习环境以及一个机器学习例子

作者 | hzyido 来源 | 简书 糖豆贴心提醒,本文阅读时间6分钟,文末有秘密! 这篇文章介绍了Python机器学习环境的搭建,我用的机器学习开...

48712
来自专栏大数据智能实战

DrQA实践

2017年七月份Facebook开源了其开放域问答系统DrQA的代码。关于DrQA,还有一篇2017年发表在ACL上的论文《Reading Wikipedi...

2525
来自专栏人工智能

完全云端运行:使用谷歌CoLaboratory训练神经网络

选自Medium 作者:Sagar Howal 机器之心编译 参与:路雪 Colaboratory 是一个 Google 研究项目,旨在帮助传播机器学习培训和研...

5338
来自专栏ATYUN订阅号

浣熊检测器实例, 如何用TensorFlow的Object Detector API来训练你的物体检测器

这篇文章是“用Tensorflow和OpenCV构建实时对象识别应用”的后续文章。具体来说,我在自己收集和标记的数据集上训练了我的浣熊检测器。完整的数据集可以在...

3857
来自专栏专知

【下载】PyTorch 实现的YOLO v2目标检测算法

【导读】目标检测是计算机视觉的重要组成部分,其目的是实现图像中目标的检测。YOLO是基于深度学习方法的端到端实时目标检测系统(YOLO:实时快速目标检测)。YO...

4006
来自专栏ATYUN订阅号

【深度学习】图片风格转换应用程序:使用CoreML创建Prisma

WWDC 2017让我们了解了苹果公司对机器学习的看法以及它在移动设备上的应用。CoreML框架使得将ML模型引入iOS应用程序变得非常容易。 ? 大约一年前,...

4008
来自专栏机器之心

教程 | TensorEditor :一个小白都能快速玩转的神经网络搭建工具

1616
来自专栏ATYUN订阅号

【实践操作】:六步教你如何用开源框架Tensorflow对象检测API构建一个玩具检测器

TensorFlow对象检测API是一个建立在TensorFlow之上的开源框架,可以轻松构建,训练和部署对象检测模型。 到目前为止,API的性能给我留下了深刻...

3398
来自专栏机器之心

资源 | 清华大学发布OpenNE:用于网络嵌入的开源工具包

2807
来自专栏专知

【干货】手把手教你用苹果Core ML和Swift开发人脸目标识别APP

【导读】CoreML是2017年苹果WWDC发布的最令人兴奋的功能之一。它可用于将机器学习整合到应用程序中,并且全部脱机。CoreML提供的机器学习 API,包...

2676

扫描关注云+社区