【冷知识】torchvision.datasets.ImageFolder加载类标不正确

这个是最近在分析实验结果才关注到这个问题,发现ImageFloder类加载出来的数据标签和真是标签不同(这个主要是指当您的类别是100类(包含100)以上情况)。这个问题可以通过以下方式进行解决。

1 首先关注Torchvision中的ImageFloder源码

点击进入
【冷知识】torchvision.datasets.ImageFolder加载类标不正确_第1张图片

数据集存储的方式(即每个种类对应一个类标文件夹)
在这里插入图片描述

可以注意到源码中,classes的值是通过扫描文件夹得到的,即您的数据集如果是按照ImageNet格式的方式存储,其每个文件夹名称为 “0”,“1”,“2”,…“100”,“101”…"1000"这样的话,明显通过sorted函数,这个时候会对字符串进行排序(升序排列),则明显原来是 “0”,“1”,“2”,…“100”,“101”…“1000”,现在要变为 “0”,“1”,“10”,“100”,“101”,“1000”,“2”,“20”…这个时候通过 class_to_idx 的字典映射时候,就发现类标变为了:.{‘0’: 0, ‘1’: 1, ‘10’: 2, ‘100’: 3, ‘101’: 4, ‘11’: 5, ‘12’: 6, ‘13’: 7, ‘14’: 8, ‘15’: 9…}的情况。

打印自定义数据集的class_to_idx

#定义好dataset之后,
dataset = datasets.ImageFolder(root,transform=transform)
#直接打印 成员变量 class_to_idx 即可
print("*"*10,dataset.class_to_idx)

然后可以根据数据集的具体情况进行后续的操作了。

你可能感兴趣的:(Python,机器学习,人工智能)