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

图像分类模型批量预测新图像失败:仅输出单张结果求助

问题原因

你的代码存在两个核心问题,导致只输出最后一张图片的预测结果:

  • 循环里每次执行images = np.vstack([X])都会覆盖之前的images变量,最终images中仅保留了最后一张图片的数据。
  • 预测和打印操作放在循环外部,只对最后一次循环生成的images进行了处理。
修复方案

方案一:逐个处理图片并即时输出

直接在循环内完成单张图片的预测与结果打印,无需额外收集所有图片:

def predictionrelease(preds):
    arr = []
    for i in range(len(preds)):
        ans = np.argmax(preds[i])
        arr.append(ans)
    return arr

dir_path = 'predict'
for img_name in os.listdir(dir_path):
    # 加载并显示图片
    img = image.load_img(os.path.join(dir_path, img_name), target_size=(200,200,3))
    plt.imshow(img)
    plt.show()
    # 预处理图片
    X = image.img_to_array(img)
    X = np.expand_dims(X, axis=0)
    # 单张图片预测并打印结果
    val = predictionrelease(model.predict(X))
    print(f"图片 {img_name} 的预测结果:{val}")

方案二:批量收集图片后一次性预测

如果想要批量处理所有图片,可以先收集所有图片数据,再合并成数组进行批量预测:

def predictionrelease(preds):
    arr = []
    for i in range(len(preds)):
        ans = np.argmax(preds[i])
        arr.append(ans)
    return arr

dir_path = 'predict'
image_list = []
img_names = []

# 遍历文件夹,收集所有图片数据和文件名
for img_name in os.listdir(dir_path):
    img = image.load_img(os.path.join(dir_path, img_name), target_size=(200,200,3))
    plt.imshow(img)
    plt.show()
    X = image.img_to_array(img)
    X = np.expand_dims(X, axis=0)
    image_list.append(X)
    img_names.append(img_name)

# 合并所有图片数据
images = np.vstack(image_list)
# 批量预测
all_preds = predictionrelease(model.predict(images))

# 逐个打印每张图片的预测结果
for name, pred in zip(img_names, all_preds):
    print(f"图片 {name} 的预测结果:{pred}")
额外优化提示
  • 用os.path.join(dir_path, img_name)替代字符串拼接路径,避免不同操作系统下的路径分隔符问题。
  • 你的predictionrelease函数可以简化,无需手动循环:
    def predictionrelease(preds):
        return np.argmax(preds, axis=1).tolist()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:05:59