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

如何用Keras的ImageDataGenerator加载无分类子文件夹的手写阿拉伯字母数据集

问题原因

flow_from_directory()的核心逻辑是从分类子文件夹中读取图片并自动识别类别,你的所有图片都直接放在dataset/train根目录下,没有按类别划分到子文件夹,所以它无法识别任何类别和图片,才会返回Found 0 images belonging to 0 classes.。

解决方案

下面提供两种实用的解决方法,你可以根据需求选择:

方法1:先将图片按标签分类到子文件夹

如果之后想继续用flow_from_directory(),可以先写个简单脚本,从文件名提取标签,自动创建子文件夹并移动图片:

import os
import shutil

train_dir = 'dataset/train'

# 遍历目录下所有文件
for filename in os.listdir(train_dir):
    if filename.endswith('.png'):
        # 从文件名提取标签(示例从id_1_label_1.png中提取label_1)
        # 请根据你的实际文件名格式调整分割逻辑
        label = filename.split('_')[2]
        # 创建标签对应的子文件夹
        label_dir = os.path.join(train_dir, label)
        os.makedirs(label_dir, exist_ok=True)
        # 移动图片到对应子文件夹
        src_path = os.path.join(train_dir, filename)
        dst_path = os.path.join(label_dir, filename)
        shutil.move(src_path, dst_path)

运行完这个脚本后,你的数据集会变成dataset/train/label_1、dataset/train/label_2这样的结构,再运行你原来的flow_from_directory()代码就能正常识别类别和图片了。

方法2:使用flow_from_dataframe()加载(无需移动图片)

如果不想改动数据集结构,可以用Keras的flow_from_dataframe()方法,它支持通过DataFrame指定图片路径和对应标签:

import pandas as pd
import os
from keras.preprocessing.image import ImageDataGenerator

train_dir = 'dataset/train'

# 1. 生成包含图片路径和标签的DataFrame
file_list = []
label_list = []

for filename in os.listdir(train_dir):
    if filename.endswith('.png'):
        file_list.append(filename)
        # 提取标签,请根据实际文件名格式调整
        label = filename.split('_')[2]
        label_list.append(label)

df = pd.DataFrame({
    'filename': file_list,
    'label': label_list
})

# 2. 初始化ImageDataGenerator
train_datagen = ImageDataGenerator(
    rescale=1./255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True
)

# 3. 使用flow_from_dataframe加载数据
training_set = train_datagen.flow_from_dataframe(
    dataframe=df,
    directory=train_dir,
    x_col='filename',
    y_col='label',
    target_size=(64, 64),
    batch_size=32,
    class_mode='categorical'
)

运行这段代码后,training_set会正确识别所有图片和对应的类别,输出类似Found X images belonging to Y classes.的信息。

注意:两种方法中,标签提取的逻辑需要根据你的实际文件名格式调整,如果文件名格式和示例不同,要修改分割索引或用正则表达式提取标签。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 13:46:08