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

使用ImageDataGenerator训练准确率75%但evaluate_generator准确率0%问题

训练准确率75%但evaluate_generator准确率0%?来排查这几个关键点

嘿,这个问题我之前帮朋友排查过类似的,咱们一步步来揪出问题所在:

  • 训练与评估的ImageDataGenerator参数不匹配
    这是最常见的原因!你得确保训练和评估用的generator在rescale、class_mode、classes这些核心参数上完全一致:

    • 比如训练时你用了rescale=1./255来归一化图片,那评估的generator也必须加这个参数——不然模型看到的评估图片像素值是0-255,和训练时的0-1完全不在一个分布,预测自然全错。
    • 你用了categorical_crossentropy损失,说明训练时generator的class_mode是'categorical'(生成独热编码标签),那评估的generator绝对不能设成'sparse'或者'binary',否则标签格式和模型输出不匹配,准确率直接跌到0。
  • 类别列表顺序不一致
    你定义了classes = <list of classes>,那训练和评估的generator都必须显式传入这个classes参数!如果评估时没传,或者传了另一个顺序不同的列表,模型预测的类别索引会和真实标签的索引完全错位——比如模型以为索引0是猫,而评估数据里索引0是狗,所有预测都对应错了类别,准确率当然是0。

  • evaluate_generator的steps参数设置错误
    你得确认steps参数的值等于验证集样本总数 ÷ batch_size。如果steps设得太小(比如只设了1),模型只评估了一小部分数据,刚好全错;或者设得太大,generator重复生成数据,导致计算逻辑混乱。另外,记得调用evaluate_generator前可以给generator加个val_generator.reset(),避免之前的迭代残留影响结果。

  • 模型权重的意外重置
    虽然你没提到保存加载,但也要检查一下:在训练完到评估之间,有没有不小心重新编译了模型,或者覆盖了pretrained_model变量?如果训练后的权重被重置成初始状态,那评估当然会得到随机水平的准确率(0%刚好是极端情况)。

举个正确的示例参考,训练和评估的generator要这么写:

# 训练generator
train_datagen = ImageDataGenerator(rescale=1./255, rotation_range=20)
train_gen = train_datagen.flow_from_directory(
    'train_dir',
    target_size=(224,224),
    batch_size=32,
    class_mode='categorical',
    classes=classes  # 必须传入统一的类别列表
)

# 评估generator(核心参数完全对齐)
val_datagen = ImageDataGenerator(rescale=1./255)  # 只做归一化,不做数据增强
val_gen = val_datagen.flow_from_directory(
    'val_dir',
    target_size=(224,224),
    batch_size=32,
    class_mode='categorical',
    classes=classes  # 和训练用同一个类别列表
)

# 评估时计算正确的steps
val_steps = val_gen.samples // val_gen.batch_size
accuracy = pretrained_model.evaluate_generator(val_gen, steps=val_steps, verbose=1)

先从这几个点排查,大概率能解决问题!

内容的提问来源于stack exchange,提问作者Ben Sandler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:32:49