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

使用keras.utils.image_dataset_from_directory加载测试集结果差异原因问询

同数据集不同加载方式导致模型性能指标骤变的原因

问题场景

我使用Keras加载测试数据集时,两种方式得到的模型性能指标天差地别:

加载方式1:直接读取全量数据集

test_ds = keras.utils.image_dataset_from_directory(img_path, image_size=image_size, batch_size = batch_size)

对应指标:
准确率=0.5214,精确率=0.5950,F1分数=0.5435

加载方式2:通过拆分验证集获取数据

_, new_images = keras.utils.image_dataset_from_directory(img_path, shuffle=True, subset="both", seed=1, validation_split=0.9999, image_size=image_size, batch_size = batch_size)

对应指标:
准确率=0.9635,精确率=0.9658,F1分数=0.9688

补充:指标计算代码

predict = model.predict(new_images)
actual = tf.concat([y for x, y in new_images], axis=0).numpy().tolist()

# 计算最优阈值(基于Youden指数)
fpr, tpr, thresholds = sklearn.metrics.roc_curve(actual, predict)
J = tpr - fpr
threshold = thresholds[np.argmax(J)]

# 根据阈值生成预测结果
predicted = [1 if res > threshold else 0 for res in predict]

# 输出指标
print(sklearn.metrics.accuracy_score(actual, predicted), 
      sklearn.metrics.f1_score(actual, predicted), 
      sklearn.metrics.precision_score(actual, predicted))

核心原因分析

1. 指标计算逻辑不一致(最可能)

你在方式2中用了基于Youden指数的最优阈值生成预测结果,但需要确认:计算方式1的指标时,是否用了同样的逻辑?
如果方式1直接用了默认的0.5阈值,而方式2用了针对当前数据集优化后的阈值,这种差异完全合理。尤其是在二分类任务中,当数据类别不平衡、模型输出概率分布偏斜时,最优阈值和0.5的差距会非常大,直接导致指标飙升。

2. 数据集拆分的隐含问题

当设置validation_split=0.9999时,new_images作为验证集几乎包含了全部数据,但要注意:

  • 方式1的test_ds是否真的和new_images完全一致?可以通过tf.data.Dataset.cardinality()查看样本数量是否匹配
  • shuffle=True虽然不会直接影响指标,但如果原数据集存在类别连续分布的情况,方式1的顺序加载可能刚好取到了模型难分类的样本段,不过这种概率极低

3. 数据集加载的细节差异

  • 检查两种加载方式是否有隐含的预处理差异:比如是否无意中开启了数据增强?不过默认情况下image_dataset_from_directory不会自动应用增强,除非指定了preprocessing_function
  • 确认标签映射是否一致:两种方式下,数据集的类别标签顺序是否相同?比如方式1的标签0对应A类,方式2是否也是如此?

类似经验

这种情况在分类任务中非常常见,踩坑的核心原因大多是变量控制不严格:

  • 做对比实验时,必须保证除了要测试的变量(这里是加载方式),其他所有环节(包括指标计算逻辑、预处理、标签映射)完全一致
  • 不要默认用0.5作为二分类阈值,一定要根据数据集的ROC曲线计算最优阈值,尤其是不平衡数据集
  • 用validation_split拆分数据时,最好打印拆分后的样本数量和类别分布,确认和预期一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 16:53:31