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

如何将flow_from_directory构建的Keras模型预测结果与测试Image_ID对应

顺序一致性说明

你得到的预测输出顺序和test.csv里的Image_ID顺序不一致。flow_from_directory加载测试集时,样本顺序是按照文件系统返回的文件名升序排列,和test.csv的行排序没有关联。

对应方法

Keras的DirectoryIterator生成器自带filenames属性,存储的就是生成器样本顺序对应的完整文件名,你可以通过这个属性做匹配:

  1. 先把预测结果压平为一维数组:
# 注意你提到的(1,m)形状大概率是维度顺序问题,正常predict_generator返回的是(m,1)结构
preds = model.predict_generator(test_it).flatten()
  1. 从测试生成器提取Image_ID:
import pandas as pd
# 提取文件名并去掉.tif后缀,得到和csv匹配的Image_ID
test_generator_ids = [filename.split('.')[0] for filename in test_it.filenames]
  1. 匹配test.csv的顺序:
# 读取原始test.csv
test_df = pd.read_csv("test.csv")
# 生成预测结果表
pred_df = pd.DataFrame({
    "Image_ID": test_generator_ids,
    "pred_score": preds
})
# 按Image_ID字段合并,得到和原始test.csv顺序完全一致的结果
result_df = pd.merge(test_df, pred_df, on="Image_ID", how="left")
# 如果需要输出二分类标签,加阈值判断即可,示例阈值为0.5
result_df["Target"] = (result_df["pred_score"] >= 0.5).astype(int)

注意事项

你当前的测试生成器设置了class_mode=None,这种情况下flow_from_directory默认shuffle=False,配合你设置的固定seed,生成器的样本顺序和filenames属性的顺序完全一致,不会出现乱序。如果要更稳妥,你可以在构建test_it时显式加上shuffle=False参数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:15:03