You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keras的ImageDataGenerator.flow_from_directory大类别数下图像标签不匹配问题

ImageDataGenerator 多类别标签不匹配问题解答

核心原因

flow_from_directory 方法默认会按照子文件夹名称的字符串字典序生成类别索引映射,而非数值排序规则。
你在10类别以内测试时,0~9的数字字符串的字典序与数值排序完全一致,因此标签匹配正常。当类别数超过10后,数字字符串的字典序和数值排序会出现严重偏差:
举个排序示例,字典序下的顺序为 "1" < "10" < "100" < ... < "1999" < "2" < "20" < "200" < ...,你认为命名为300的文件夹应该对应索引299(0起始),但实际排序中所有以1、2开头的文件夹都会排在"300"前面,最终它的索引就会远大于预期,和你遇到的300类对应标签1948的现象完全吻合。

修复方案

手动传入classes参数,强制指定类别映射顺序即可解决问题:

from tensorflow.keras.preprocessing.image import ImageDataGenerator

trainDataGen = ImageDataGenerator(rescale=1./255)
# 按你的需求生成顺序正确的类别名称列表,示例为文件夹命名为0~1999的字符串的场景
class_order = [str(i) for i in range(2000)]
trainGenSet = trainDataGen.flow_from_directory(
    './test1',
    batch_size=8,
    target_size=(64,64),
    class_mode='categorical',
    color_mode='grayscale',
    classes=class_order, # 手动指定类别顺序,覆盖默认字典序
    shuffle=False # 验证阶段可关闭shuffle方便核对标签
)

你可以打印生成器的class_indices属性,核对每个文件夹对应的标签是否符合预期:

print(trainGenSet.class_indices)

内容的提问来源于stack exchange,提问作者JH.KIM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:24:01