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

TensorFlow/Keras image_dataset_from_directory报NotFoundError求助

解决TensorFlow/Keras image_dataset_from_directory的NotFoundError问题

核心要求:目录结构必须规范

image_dataset_from_directory对数据目录结构有硬性要求,主目录下必须直接包含类别子目录,每个子目录下存放对应类别的图片,不能有额外嵌套或无关文件,示例结构如下:

data/
    cat/
        cat1.jpg
        cat2.jpg
    dog/
        dog1.jpg
        dog2.jpg

正确指定数据路径的方法

  1. 用绝对路径
    直接写完整路径,避免相对路径的歧义:

    • Windows系统:"C:/Users/YourName/Documents/data" 或 "C:\\Users\\YourName\\Documents\\data"
    • Linux/macOS系统:"/home/YourName/data"
  2. 验证相对路径的正确性
    如果用相对路径,先确认当前工作目录是否正确:

    import os
    print(os.getcwd())  # 输出当前代码运行的目录
    

    确保你的数据目录(比如data)就在这个目录下,或者用"./data"明确指定相对路径。

  3. 先验证路径有效性
    在调用函数前,先检查路径是否存在,以及目录内容是否符合要求:

    data_path = "your_data_path"
    print(os.path.exists(data_path))  # 必须返回True
    print(os.listdir(data_path))     # 应该看到所有类别子目录
    

排查与解决步骤

  • 检查权限:确保程序有目标目录的读写权限,Linux/macOS下可以用chmod命令调整;Windows下右键目录,检查“安全”选项卡的权限设置。
  • 检查文件完整性:如果是压缩包解压的数据集,确认解压过程没有中断,没有损坏的图片文件。
  • 云环境特殊处理:如果在Colab等云平台,确认已经挂载云盘(比如Google Drive)或者数据集已经正确上传到环境中。
  • 测试最小示例:创建一个极简的测试目录(比如两个子目录各放1张图片),用函数加载,排查是否是数据集本身的问题。

替代方案:手动加载数据集

如果上述方法都无效,可以用tf.data.Dataset手动实现加载逻辑,灵活性更高:

import os
import tensorflow as tf

def load_custom_dataset(data_path, image_size=(224,224), batch_size=32):
    # 获取类别名称和所有图片路径
    class_names = [d for d in os.listdir(data_path) if os.path.isdir(os.path.join(data_path, d))]
    file_paths = []
    labels = []
    
    for cls_idx, cls_name in enumerate(class_names):
        cls_dir = os.path.join(data_path, cls_name)
        for img_file in os.listdir(cls_dir):
            file_paths.append(os.path.join(cls_dir, img_file))
            labels.append(cls_idx)
    
    # 创建并预处理数据集
    def preprocess(image_path, label):
        img = tf.io.read_file(image_path)
        img = tf.image.decode_jpeg(img, channels=3)  # 根据图片格式调整,比如png用decode_png
        img = tf.image.resize(img, image_size)
        # 可选:添加自定义预处理,比如归一化
        img = img / 255.0
        return img, label
    
    dataset = tf.data.Dataset.from_tensor_slices((file_paths, labels))
    dataset = dataset.map(preprocess, num_parallel_calls=tf.data.AUTOTUNE)
    dataset = dataset.shuffle(buffer_size=1000).batch(batch_size).prefetch(tf.data.AUTOTUNE)
    
    return dataset, class_names

# 使用示例
dataset, class_names = load_custom_dataset("your_data_path", (224,224), 32)

内容的提问来源于stack exchange,提问作者SENTHIL KUMAR KJ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 03:17:22