我知道ImageNet的子集是存在的,但是它们并不满足我的需求。我想要50个课程在他们的本地ImageNet分辨率。
为此,我使用torch.utils.data.dataset.Subset从ImageNet中选择特定的类。然而,事实证明,类标签/索引必须大于0且小于num_classes。
由于ImageNet包含1000个类,所以我所选类的idx很快超过50个。我如何重新分配类索引,并以一种能够在以后进行评估的方式进行?
有没有一种更优雅的选择子集的方法?
发布于 2021-01-14 20:17:45
我不确定我是否理解你关于标签大于零和小于num_classes的结论。torch.utils.data.Subset助手接受一个torch.utils.data.Dataset和一系列索引,它们对应于您希望保留在子集中的Dataset中的数据点的索引。这些索引与它们所属的类无关。
下面是我处理这个问题的方法:
torchvision.datasets加载数据集(自定义数据集将以相同的方式工作)。这里我将用FashionMNIST演示它,因为ImageNet的数据不是通过torchvision的torchvision.datasets.FashionMNIST= torchvision.datasets.FashionMNIST('.') >>> len(ds) 60000直接提供的。
中的标签
你的subset:
ds_subset =子集(ds,索引) >>> len(ds_subset) 24000
此时,可以使用targets
remap = {i:x for i,x in (
例如:
x,y= ds_subset10 >>> y,remapy # old_label,new_label 1,old_label
https://stackoverflow.com/questions/65725306
复制相似问题