ImageFolder数据集是否包含标签?获取标签时报Subset无labels属性如何处理
ImageFolder常见问题解答
ImageFolder的标签属性与存储内容
- 原生
ImageFolder类默认自带标签,它会自动将同级子文件夹的名称作为类别名,按字典序为每个类别分配从0开始的数字标签,无需手动标注。 ImageFolder实例内置的核心可访问属性包括:classes:所有类别的名称列表,顺序和标签数字一一对应class_to_idx:类别名到数字标签的映射字典samples/imgs:所有样本组成的列表,每个元素是(图片完整路径, 对应数字标签)的元组labels:所有样本的数字标签组成的列表,和样本顺序一致
'Subset' object has no attribute 'labels'报错解决
该报错的本质是你操作的对象不是原生
ImageFolder实例,而是使用random_split等拆分函数对ImageFolder切分后得到的Subset实例,Subset作为包装类本身没有labels属性。
两种通用解决方法:
- 通过
Subset内置的dataset属性访问原ImageFolder的标签,再配合indices属性筛选对应拆分部分的标签:
# 示例:假设拆分得到的训练集对象为train_subset origin_labels = train_subset.dataset.labels train_labels = [origin_labels[idx] for idx in train_subset.indices]
- 直接遍历
Subset提取标签,适配所有版本的torchvision,无需关心原数据集属性:
train_labels = [label for img, label in train_subset]
内容的提问来源于stack exchange,提问作者beginner
相关产品推荐
相关产品推荐

