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

Keras flow_from_directory返回0张图片:批量预测无图片检测问题

解决flow_from_directory找不到测试图片的问题

我来帮你分析下这个问题哈~你遇到的核心问题是ImageDataGenerator.flow_from_directory的工作规则和你的目录结构不匹配,导致它识别不到图片。

问题原因

flow_from_directory这个方法要求指定的目标目录下必须包含对应类别的子文件夹,哪怕是测试集也一样。比如你的train目录应该是下面有cats和dogs子目录对吧?但你的test目录应该是直接把图片放在了根目录里,没有创建对应的类别子文件夹,所以这个方法会认为没有符合要求的图片数据。

解决方案

根据你的需求,分两种情况处理:

情况1:测试集有明确的类别标签

调整你的test目录结构,按照和train一样的方式组织:

  • 在dogs_vs_cats/test/下新建两个子目录:cats和dogs
  • 把测试集中的猫类图片全部移到test/cats/,狗类图片移到test/dogs/

最终目录结构应该是这样:

dogs_vs_cats/
├── train/
│   ├── cats/
│   └── dogs/
├── test/
│   ├── cats/
│   └── dogs/
└── 你的笔记本文件.ipynb

这样你的原有代码就能正常读取到图片了,不需要修改代码逻辑。

情况2:测试集是无标签的(只有图片,没有类别区分)

如果你的测试集没有明确的类别,只是一堆待预测的图片,那flow_from_directory就不适用了,推荐手动加载图片:

import os
import numpy as np
from PIL import Image

# 定义图片预处理参数
target_size = (300, 300)
test_dir = "test/"

test_images = []
filenames = []

# 遍历test目录下的所有图片
for img_file in os.listdir(test_dir):
    # 过滤非图片文件
    if img_file.lower().endswith(('.png', '.jpg', '.jpeg')):
        # 读取并预处理图片
        img_path = os.path.join(test_dir, img_file)
        img = Image.open(img_path).resize(target_size)
        img = np.array(img) / 255.0  # 归一化到0-1区间,和ImageDataGenerator默认行为一致
        test_images.append(img)
        filenames.append(img_file)

# 转换为模型可接受的数组格式
test_images = np.array(test_images)

之后你就可以用model.predict(test_images)来获取预测结果,同时filenames列表里也保存了对应的图片文件名。

额外小提示

如果不确定当前工作目录是否正确,可以在代码里先打印当前路径验证:

import os
print(os.getcwd())

确保输出的路径是dogs_vs_cats的根目录,这样相对路径test/才会被正确识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:21:08