经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
python中关于CIFAR10数据集的使用
来源:jb51  时间:2023/2/2 9:09:02  对本文有异议

关于CIFAR10数据集的使用

主要解决了如何把数据集与transforms结合在一起的问题。

CIFAR10的官方解释

  1. torchvision.datasets.CIFAR10(
  2. root: str,?
  3. train: bool = True,?
  4. transform: Optional[Callable] = None,
  5. target_transform: Optional[Callable] = None,
  6. download: bool = False)

注释:

  • root (string)存在 cifar-10-batches-py 目录的数据集的根目录,如果下载设置为 True,则将保存到该目录。
  • train (bool, optional)如果为True,则从训练集创建数据集, 如果为False,从测试集创建数据集。
  • transform (callable, optional)它接受一个 PIL 图像并返回一个转换后的版本。 例如,transforms.RandomCrop/transforms.ToTensor
  • target_transform (callable, optional) 接收目标并对其进行转换的函数/转换。
  • download (bool, optional)如果为 true,则从 Internet 下载数据集并将其放在根目录中。 如果数据集已经下载,则不会再次下载。

实战操作

1.CIAFR10数据集的下载

代码如下:

  1. import torchvision ? #导入torchvision这个类
  2.  
  3. train_set = torchvision.datasets.CIFAR10(root = "./dataset", train = True,?
  4. download= True) ?#从训练集创建数据集
  5. test_set = torchvision.datasets.CIFAR10(root="./dataset", train=False,
  6. ?download=True) ? ?#从测试集创建数据集

root = "./dataset",将下载的数据集保存在这个文件夹下;download= True,从 Internet 下载数据集并将其放在根目录中,这里就是在相对路径中,创建dataset文件夹,将数据集保存在dataset中。

2.查看下载的CIAFR10数据集

运行程序,开始下载数据集。下载成功后,可以进行一些查看。代码如下:

接着输入:

  1. print(train_set[0]) ?#查看train_set训练集中的第一个数据
  2. print(train_set.classes) ? #查看train_set训练集中有多少个类别
  3. ?
  4. img, target = train_set[0]
  5. print(img)
  6. print(target)
  7. print(train_set.classes[target])
  8. img.show() ?#显示图片

输出结果:

(<PIL.Image.Image image mode=RGB size=32x32 at 0x161E924B8D0>, 6)
['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship',
'truck']
<PIL.Image.Image image mode=RGB size=32x32 at 0x161E924B710>
6
frog

注释:可以看见,train_set数据集中有10个类别,train_set中第0个元素的target是6,也就是说,这个元素是属于第7个类别frog的。

3.数据转换

因为这些图片类型都是PIL Image,如果要供给pytorch使用的话,需要将数据全都转化成tensor类型。

完整代码如下:

  1. import torchvision ? #导入torchvision这个类
  2. from torch.utils.tensorboard import SummaryWriter
  3.  
  4. from torchvision import transforms
  5. dataset_transforms = transforms.ToTensor()
  6.  
  7. # dataset_transforms = torchvision.transforms.Compose([
  8. # ? ? torchvision.transforms.ToTensor()
  9. # ]) ? ?第3 ?4 行代码可以用compose直接写
  10. train_set = torchvision.datasets.CIFAR10(root = "./dataset", train = True, transform=dataset_transforms, download= True) #训练集
  11. test_set = torchvision.datasets.CIFAR10(root="./dataset", train=False, transform=dataset_transforms, download=True) ? #测试集
  12.  
  13. writer = SummaryWriter("logs")
  14.  
  15. # print(train_set[0]) ?#查看train_set训练集中的第一个数据
  16. # print(train_set.classes) ? #查看train_set训练集中有多少个类别
  17.  
  18. # img, target = train_set[0]
  19. # print(img)
  20. # print(target)
  21. # print(train_set.classes[target])
  22. # img.show()
  23. for i in range(20):
  24. ? ? img, target = train_set[i]
  25. ? ? writer.add_image("cifar10_test2", img, i)
  26.  
  27. writer.close()

小结:CIFAR10数据集内存很小,只有100多m,下载方便。对我们学习数据集非常友好,练习的时候,我们可以使用SummaryWriter来将数据写入tensorboard中。

CIFAR-10 数据集简介

复现代码的过程中,简单了解了作者使用的数据集CIFAR-10 dataset ,简单记录一下。

CIFAR-10数据集是8000万微小图片的标签子集,它的收集者是:Alex Krizhevsky, Vinod Nair, Geoffrey Hinton。

数据集由6万张32*32的彩色图片组成,一共有10个类别。每个类别6000张图片。其中有5万张训练图片及1万张测试图片。

数据集被划分为5个训练块和1个测试块,每个块1万张图片。

测试块包含了1000张从每个类别中随机选择的图片。训练块包含随机的剩余图像,但某些训练块可能对于一个类别的包含多于其他类别,训练块包含来自各个类别的5000张图片。

这些类是完全互斥的,及在一个类别中出现的图片不会出现在其它类中。

数据集版本

作者提供了3个版本的数据集:python version; Matlab version; binary version。

可根据自己的需求选择。

数据集下载地址:下载链接

数据集布置

以python version进行介绍,Matlab version与之相同。

下载后获得文件 data_batch_1, data_batch_2,…, data_batch_5。测试块相同。这些文件中的每一个都是用cPickle生成的python pickled对象。

具体使用方法:

  1. def unpickle(file):
  2. import pickle
  3. with open(file, 'rb') as fo:
  4. dict = pickle.load(fo, encoding='bytes')
  5. return dict

返回字典类,每个块的文件包含一个字典类,包含以下元素:

  • data: 一个100003072的numpy数组(unit8)每个行存储3232的彩色图片,3072=1024*3,分别是red, green, blue。存储方式以行为主。
  • labels:使用0-9进行索引。

数据集包含的另一个文件batches.meta同样包含python字典,用于加载label_names。如:label_names[0] == “airplane”, label_names[1] == “automobile”

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号