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

Keras中如何获取或附加image_dataset_from_directory生成的MapDataset的文件名

解决方案

有两种常用实现方式,按需选择即可:

方案1:直接保留原始文件名列表

tf.keras.preprocessing.image_dataset_from_directory返回的数据集对象的filenames属性顺序,和数据集输出样本的顺序完全一致,你可以先将该列表单独保存,后续按索引匹配即可:

# 加载数据集后先保存文件名列表
train_filenames = train_ds.filenames
# 后续对数据集的map、batch等操作不会改变样本顺序,直接按批次索引从train_filenames取对应文件名即可

注意:如果需要对数据集做shuffle操作,请在shuffle时指定固定随机种子,或者完成shuffle后再生成文件名列表,避免顺序不匹配。

方案2:将文件名嵌入数据集管道

如果你需要在迭代数据集时直接同步获取对应文件名,可以把文件名作为数据集的一部分一同传输:

# 生成文件名数据集
filename_ds = tf.data.Dataset.from_tensor_slices(train_ds.filenames)
# 与原始图像数据集拼接
train_ds_with_filenames = tf.data.Dataset.zip((train_ds, filename_ds))

# 调整预处理函数,同步返回文件名
normalization_layer = layers.experimental.preprocessing.Rescaling(1./255)
def adjust_inputs_with_filenames(img_label_pair, filename):
    images, _ = img_label_pair
    norm_img = normalization_layer(images)
    return (norm_img, norm_img), filename

# 预处理后的数据集每个批次返回 ((训练输入, 训练真值), 对应文件名数组)
normalized_train_ds = train_ds_with_filenames.map(adjust_inputs_with_filenames)

这种方式不需要额外维护文件名和样本的对应关系,迭代时直接读取即可,适用于需要频繁获取文件名的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:24:05