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

使用tf.keras.image_dataset_from_directory洗牌时标签图片不匹配的解决咨询

解决tf.keras.image_dataset_from_directory洗牌时标签与图片不匹配的问题

首先明确:tf.keras.utils.image_dataset_from_directory本身会自动将图片与对应标签绑定后再执行洗牌操作,出现标签不匹配大概率是路径设置错误或使用误区导致的,以下是具体排查和解决方法:

1. 检查数据集路径是否正确

该函数要求传入的directory参数必须直接指向包含类别子文件夹的目录。根据你的目录结构,data_path应该设置为dataset/train(训练集)或dataset/test(测试集),而不是根目录dataset。如果指向根目录,函数会把train、test当成类别,自然会出现标签错误。

修正后的代码:

import tensorflow as tf

data_path = "dataset/train"  # 指向训练集类别文件夹的父目录
train_dset = tf.keras.utils.image_dataset_from_directory(
    directory=data_path,
    batch_size=32,
    image_size=(256,256),
    label_mode="int",
    shuffle=True
)

2. 验证图片与标签的对应关系

可以取出一批数据直观验证标签是否正确:

import matplotlib.pyplot as plt

# 获取类别名称
class_names = train_dset.class_names
# 取出第一批数据
for images, labels in train_dset.take(1):
    # 展示前3张图片及其标签
    for i in range(3):
        ax = plt.subplot(1, 3, i+1)
        plt.imshow(images[i].numpy().astype("uint8"))
        plt.title(class_names[labels[i]])
        plt.axis("off")
    plt.show()

3. 手动实现绑定后洗牌(自定义场景)

如果需要完全自定义洗牌逻辑,可以先创建不洗牌的数据集,再对绑定好的(图片, 标签)对整体洗牌:

# 创建不洗牌的数据集,确保图片与标签一一对应
train_dset_unshuffled = tf.keras.utils.image_dataset_from_directory(
    directory=data_path,
    batch_size=32,
    image_size=(256,256),
    label_mode="int",
    shuffle=False
)

# 对绑定后的数据集整体洗牌,buffer_size建议大于样本总数以保证充分洗牌
train_dset_shuffled = train_dset_unshuffled.shuffle(buffer_size=1000)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:20:12