图像分类模型批量预测新图像失败:仅输出单张结果求助
问题原因
你的代码存在两个核心问题,导致只输出最后一张图片的预测结果:
- 循环里每次执行
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
相关产品推荐
相关产品推荐

