| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> Pytorch cifar100数据集的简单理解与用法 -> 正文阅读 |
|
[人工智能]Pytorch cifar100数据集的简单理解与用法 |
https://pytorch.org/vision/stable/generated/torchvision.datasets.CIFAR100.html#torchvision.datasets.CIFAR100 torchvision.datasets中提供了一些经典数据集,其中最为常用的是cifar10/100,mnist,在搓增量学习、领域自适应、主动学习等任务时经常需要打交道。这里我们以cifar100为例看一下其基本的用法。 首先,下载训练集与测试集:
可以看到有四个参数:
到这里,严格来讲就算介绍完毕了,因为这里得到的train_dataset和test_dataset都属于torch.utils.data.Dataset对象,剩下来的用法和我们自己手工封装数据集的一致。现在,我们着重考察下cifar100数据集的结构。 首先,直接用下标去访问一个数据集对象:
输出结果如下:
可以看到得到的是一个tuple,第一项为image,第二项为ground truth,即图像所属的分类,使用一个int值表示。在训练计算损失函数的时候,直接使用F.cross_entropy即可,而不需要考虑将int标签转化成独热向量的形式。而对于image,在实际训练中读数据集时transform一项必然带有transforms.ToTensor(),在这种情况下返回的则是一个Tensor向量以便网络训练。 此外,还有另一种访问方法:
输出结果如下:
此时,标签仍为int不变,而数据返回的形式为ndarray:
输出结果如下:
可以看到cifar100图像的尺寸为32×32×3(3表示通道数)。这里我们也顺便将这张图像展示:
现在我们来看另一个问题,可以发现第一张图像的类为19,那么这就表明,整个数据集50000张训练图像并不是按类别顺序进行划分的,即甚至可以在使用dataloader时不打开shuffle。为了验证这一点,我们直接输出train_dataset.targets中的前10个标签:
结果如下:
可以发现确实是乱序的。但是在一些奇怪的任务里面,会要求类别是有序的(实际上我们自己做的数据集也是尽量有序的,需要打乱通过dataloader实现即可),那么这里就看一下怎么去弄。具体来说,肯定是从targets中所包含的类别信息入手。首先将其从list转为ndarray方便我们使用numpy去操作:
那么,比方说我们要取出类别在[10, 19]内的全部样本,就可以把相应的target先取出来。这里先得到一个长度为50000的包含每个元素是否满足条件的列表:
输出:
然后使用np.where()进行广播,获得具体的下标:
可以看到满足要求的target所对应的下标共有5000个,确实是十分之一:
最后将这些下标作为索引取出相应的子数据集即可:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 10:43:04- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |