TensorFlow中CNN模型预测类别与训练数据集文件夹的对应关系及排序规则咨询
如何映射预测类别编号到数据集文件夹名称
刚好碰到过类似的场景,我来给你梳理清楚这两个核心问题:
1. 快速获取类别编号与文件夹名称的对应关系
当你用tf.keras.preprocessing.image_dataset_from_directory设置labels='inferred'时,生成的数据集对象(比如你的ds_train)自带一个class_names属性——这个列表的索引就是模型预测输出的类别编号,列表里的对应值就是数据集里的文件夹名称。
举个实际操作的例子,你只需要加几行代码就能得到映射:
# 打印完整的类别列表,索引对应预测的编号 print("类别编号与文件夹对应:") for idx, name in enumerate(ds_train.class_names): print(f"编号 {idx} → 文件夹 {name}") # 或者直接生成字典,方便快速查询 class_id_to_folder = {i: folder for i, folder in enumerate(ds_train.class_names)} # 查询你预测的编号25对应的文件夹 print(f"预测编号25对应的文件夹是:{class_id_to_folder[25]}")
2. TensorFlow的文件夹排序规则
TensorFlow对文件夹的排序逻辑很明确:按照文件夹名称的字典序(lexicographical order)排列,这和Python内置的sorted()函数对字符串列表的排序规则完全一致。
举几个常见场景的例子:
- 如果文件夹是数字命名的字符串(比如"0", "1", ..., "9", "10"),字典序会把"10"排在"2"前面,因为字符串比较是逐字符进行的,"1"的ASCII码比"2"小;
- 如果文件夹是英文名称(比如"cat", "dog", "apple"),会按字母顺序排列,"apple"会排在最前面;
- 中文名称的话,会按照Unicode编码的顺序来排序。
需要注意的是:如果你后续调整了数据集的文件夹,或者重新生成数据集,只要文件夹名称不变,这个排序和映射关系就不会变;如果修改了文件夹名称,记得重新查看class_names来更新映射。
内容的提问来源于stack exchange,提问作者Rukiits
相关产品推荐
相关产品推荐

