如何修改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}")
错误原因说明
- 赋值符号误用:你写的
if classes[0]=0用了赋值符号=,正确的比较应该用==,但即使改成==也会报错,因为存在第二个核心问题。 - 数组与标量比较的歧义:
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
相关产品推荐
相关产品推荐

