如何从Keras数据集直接统计各类别图像数量?
直接从Keras Image Dataset统计类别图像数量
要实现直接从train_ds统计每个类别的图像数量,核心是把数据集返回的整数标签映射到class_names对应的类别名称,具体步骤如下:
方法一:使用collections.Counter遍历数据集
import tensorflow as tf from collections import Counter # 提取所有批次的标签 all_labels = [] for _, labels in train_ds: all_labels.extend(labels.numpy()) # 统计每个标签的出现次数 label_counts = Counter(all_labels) # 映射标签到类别名称 class_image_counts = {train_ds.class_names[label]: count for label, count in label_counts.items()} # 输出结果 for cls, cnt in class_image_counts.items(): print(f"{cls}: {cnt} 张图片")
方法二:使用Numpy高效统计(适合大数据集)
import numpy as np # 合并所有批次的标签为一个Numpy数组 all_labels = np.concatenate([labels.numpy() for _, labels in train_ds]) # 统计每个标签的数量(bincount仅适用于非负整数标签) label_counts = np.bincount(all_labels) # 关联类别名称与计数 class_image_counts = dict(zip(train_ds.class_names, label_counts)) # 查看结果 print(class_image_counts)
关键说明
train_ds返回的labels是整数张量,每个整数对应train_ds.class_names列表中的索引(比如标签0对应class_names[0]),所以只需要将统计后的标签计数与class_names做映射即可得到类别名称对应的数量。- 两种方法都不需要重新读取目录文件,完全基于已加载的Keras数据集操作。
内容的提问来源于stack exchange,提问作者Imran Khan
相关产品推荐
相关产品推荐

