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

如何修改TensorFlow代码输出多分类模型的上传样本预测结果

解决TensorFlow三分类模型预测结果的判断问题

首先修正你的代码,替换原有的判断逻辑,以下是完整的修改后代码:

import numpy as np
from google.colab import files
from tensorflow.keras.utils import load_img, img_to_array

uploaded = files.upload()

# 建立类别索引到标签的映射
class_labels = {0: '5', 1: '10', 2: '20'}

for fn in uploaded.keys():
 
  path = '/content/' + fn
  img = load_img(path, target_size=(200, 150))
  x = img_to_array(img)
  x /= 255
  x = np.expand_dims(x, axis=0)

  images = np.vstack([x])
  classes = model.predict(images, batch_size=10)
  print(classes[0])
  
  # 获取概率最高的类别索引
  pred_index = np.argmax(classes[0])
  # 获取对应标签和概率
  pred_label = class_labels[pred_index]
  pred_prob = classes[0][pred_index]
  
  print(f"{fn} is a {pred_label}, probability: {pred_prob:.4f}")

错误原因说明

  1. 赋值符号误用:你写的if classes[0]=0用了赋值符号=,正确的比较应该用==,但即使改成==也会报错,因为存在第二个核心问题。
  2. 数组与标量比较的歧义:classes[0]是一个长度为3的numpy数组(对应三个类别的概率),直接和标量0/1/2比较时,numpy无法确定你要判断数组中所有元素等于标量,还是至少一个元素等于标量,因此抛出The truth value of an array with more than one element is ambiguous的错误。

关键修改点

  • 用np.argmax(classes[0])直接获取概率最大值对应的类别索引,这是多分类场景下最常用的做法。
  • 建立字典class_labels来映射索引和实际标签,让代码更清晰易维护。
  • 使用格式化字符串输出预测结果和对应概率,提升可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 11:09:56