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

Keras中image_dataset_from_directory提取混淆矩阵标签异常问题

解决Keras中image_dataset_from_directory标签提取不一致的问题

你的问题核心在于image_dataset_from_directory设置shuffle=True时,每次迭代数据集都会重新打乱样本顺序,若分多次提取标签,两次结果必然不匹配,直接导致混淆矩阵、分类报告与模型验证准确率不符。以下是具体解决方案:

方案1:固定随机种子并一次性提取数据

给数据集设置固定seed,同时一次性遍历验证集提取所有标签和图像,避免多次访问带来的顺序变化:

# 初始化验证集时固定seed
val_ds = tf.keras.utils.image_dataset_from_directory(
    validation_dir,
    image_size=(img_height, img_width),
    batch_size=batch_size,
    shuffle=True,
    seed=42  # 固定随机种子确保打乱顺序一致
)
val_ds = val_ds.cache().prefetch(buffer_size=tf.data.AUTOTUNE)  # 缓存优化,避免重复打乱

# 一次性提取所有标签和图像
validation_labels = []
validation_data = []
for batch_images, batch_labels in val_ds:
    validation_labels.extend(batch_labels.numpy())
    validation_data.extend(batch_images.numpy())

# 生成预测结果
predictions = model.predict(np.array(validation_data))
predicted_labels = np.argmax(predictions, axis=1)

# 生成混淆矩阵和分类报告
from sklearn.metrics import confusion_matrix, classification_report
print("混淆矩阵:")
print(confusion_matrix(validation_labels, predicted_labels))
print("\n分类报告:")
print(classification_report(validation_labels, predicted_labels))

方案2:评估阶段关闭shuffle

如果仅用于模型评估,无需打乱验证集,直接设置shuffle=False,这样样本顺序固定,多次访问标签结果一致:

val_ds = tf.keras.utils.image_dataset_from_directory(
    validation_dir,
    image_size=(img_height, img_width),
    batch_size=batch_size,
    shuffle=False  # 关闭打乱,固定样本顺序
)

# 提取标签
validation_labels = []
for _, labels in val_ds:
    validation_labels.extend(labels.numpy())

# 生成预测并计算指标
predictions = model.predict(val_ds)
predicted_labels = np.argmax(predictions, axis=1)

print(confusion_matrix(validation_labels, predicted_labels))
print(classification_report(validation_labels, predicted_labels))

问题原因说明

当shuffle=True且未固定seed时,image_dataset_from_directory每次迭代都会重新生成随机打乱后的样本序列,两次提取的标签对应不同的图像样本,自然与模型验证时的样本顺序不匹配,最终导致混淆矩阵和分类报告结果偏离真实验证准确率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:05:20