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

Keras:使用生成器预测并生成图像分类结果对照表

解决Keras生成器预测后匹配文件名与类别问题

直接给你可行的解决方案,步骤如下:

1. 固定生成器顺序,保证预测与文件名对应

修改flow_from_directory的参数,添加shuffle=False,关闭生成器的打乱功能,这样预测结果的顺序会和生成器存储的文件名顺序完全一致:

test_generator = datagen.flow_from_directory(
    r"C:\new_data",
    target_size=(260, 180),
    batch_size=100,
    color_mode="grayscale",
    class_mode="categorical",
    shuffle=False  # 关键:关闭打乱,确保顺序匹配
)

2. 获取文件名与类别映射关系

生成器自带两个实用属性:

  • test_generator.filenames:存储所有输入图像的路径(如果图像放在分类子目录下,格式为子目录/文件名;如果直接放在根目录,就是纯文件名)
  • test_generator.class_indices:是类别名到索引的字典(比如{'coffee':0, 'car':1}),我们需要反转它得到索引到类别名的映射:
# 生成索引到类别名的映射字典
idx_to_class = {v: k for k, v in test_generator.class_indices.items()}

3. 处理预测结果,匹配文件名与类别

执行预测后,把概率数组转换成类别索引,再映射成对应的类别名:

# 执行预测(用生成器的batch_size即可,无需单独设置)
predicted_elements = model.predict(test_generator, verbose=1)

# 获取每个样本的预测类别索引(取概率最大值对应的索引)
predicted_indices = predicted_elements.argmax(axis=1)

# 将索引转换为类别名
predicted_classes = [idx_to_class[idx] for idx in predicted_indices]

4. 生成对照表

用pandas生成结构化表格,方便查看和保存:

import pandas as pd

# 创建结果DataFrame
result_df = pd.DataFrame({
    'filename': test_generator.filenames,
    'prediction': predicted_classes
})

# 查看前几行验证结果
print(result_df.head())

# 保存为CSV文件(可选,便于后续查看或处理)
result_df.to_csv('prediction_results.csv', index=False)

如果你的图像直接放在C:\new_data根目录下,test_generator.filenames就是纯文件名,完全符合你要的格式;如果图像在子目录里,可通过以下代码提取纯文件名:

import os
filenames = [os.path.basename(path) for path in test_generator.filenames]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:12:43