由于Pytorch不支持内置的ImageNet数据集,因此我们需要自定义数据集。有两种方式
1、使用ImageFolder
ImageFolder需要数据集有良好的结构,train和test下分别包含相同类别的文件夹,每个文件夹存放一类图像,也就是这样
——ImageNet
——train
——cls1
——cls1_00.jpg
——cls1_01.jpg
...
——cls1_59.jpg
——cls2
——clsn
——test
——cls1
——cls1_60.jpg
——cls1_61.jpg
...
——cls1_100.jpg
——cls2
——clsn
此时把.../ImageNet/train 或者 .../ImageNet/test/ 当作imagenet_root传入ImageFolder即可
from torchvision.datasets import ImageFolder
imagenet_train = ImageFolder(imagenet_root, transform=transform_imagenet_train)
train_iter= DataLoader(imagenet_train, batch_size=batch_size, shuffle=True, num_workers=num_workers,
pin_memory=True)
2、使用自定义的数据集
当我们使用Dataset 时,必须定义__init__、__getitem__以及__len__三个成员函数。
__init__:初始化,进行数据集的准备工作__len__:返回数据集的大小__getitem__:根据索引(必要的参数)从数据集中提取数据。索引的大小为[0,self.__len__())
下面是从ImageNet全集中随机挑选100类(当然也可以任意指定数量)的代码,可以保存每一次都选取了哪些类用作训练。使用子集训练的原因是进行有效性实验,以及计算资源的限制。
# ImageNet100.py
from torch.utils.dat

本文介绍了如何在PyTorch中使用ImageFolder和自定义Dataset来处理ImageNet数据集,包括数据集结构的要求,以及如何解决数据类型不匹配的问题。重点讲解了使用ImageNet100子集的代码示例和遇到的常见问题解决方法。
最低0.47元/天 解锁文章
2538

被折叠的 条评论
为什么被折叠?



