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

基于文件名从Keras批量验证数据集中移除文件的最简速方法

从Keras验证集中过滤指定文件名的样本

实现步骤

  • 创建验证集时开启文件路径返回
    调用tf.keras.utils.image_dataset_from_directory时添加return_filepaths=True参数,让数据集每个元素包含图像、标签和对应文件路径,为后续筛选提供依据:

    import tensorflow as tf
    import os
    
    # 替换为你的实际参数
    img_height, img_width = 224, 224
    batch_size = 32
    val_dir = "path/to/your/validation_directory"
    
    val_ds = tf.keras.utils.image_dataset_from_directory(
        val_dir,
        image_size=(img_height, img_width),
        batch_size=batch_size,
        return_filepaths=True  # 启用返回文件路径
    )
    
  • 定义需排除的文件名集合
    将需要移除的文件名存入集合(集合查找效率更高):

    exclude_filenames = {"sample_to_remove.jpg", "invalid_image.png", "bad_data.jpeg"}
    
  • 过滤数据集
    使用tf.data.Dataset.filter方法剔除包含目标文件名的样本。通过TensorFlow的字符串操作提取文件名,再判断是否在排除列表中:

    def filter_samples(image, label, filepath):
        # 从完整路径中提取文件名
        filename = tf.strings.split(filepath, os.sep)[-1]
        # 保留不在排除列表中的样本
        return tf.logical_not(tf.strings.regex_full_match(filename, "|".join(exclude_filenames)))
    
    # 生成过滤后的新验证集
    filtered_val_ds = val_ds.filter(filter_samples)
    
  • (可选)移除文件路径字段
    如果后续训练只需要图像和标签,用map方法去掉路径字段:

    filtered_val_ds = filtered_val_ds.map(lambda img, lbl, path: (img, lbl))
    

注意事项

  • 确保exclude_filenames中的文件名与数据集内的文件名完全匹配(包括大小写、文件后缀),可先打印几个样本的文件路径确认格式。
  • 若某个批次的样本被全部过滤,TensorFlow会自动跳过空批次,不影响训练流程。
  • 该方法仅在数据流层面过滤样本,不会修改原文件或改变初始的数据集拆分逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 03:15:14