【问题标题】:misreading of predictions with argmax用 argmax 误读预测
【发布时间】:2022-01-10 02:16:21
【问题描述】:

我有一个包含 8 个类的分类器模型。我用它在测试集上运行预测,模型返回一个热编码数组。现在,当我对这些预测进行 argmax 以将它们转换为字符串时,它们并没有被转换为正确的类别。我认为编码数组是正确的预测,但是在 argmax 之后,它变得一团糟。

import cv2
def prepare(path):
    imgsize=128
    img_array = cv2.imread(path)
    new_array = cv2.resize(img_array, (imgsize,imgsize))
    return new_array.reshape(-1,imgsize,imgsize,3)

predictions = []
matrix = []
for label in os.listdir(path_test):
    p = model.predict([prepare(path_test+"/"+label)])
    cl = numpy.argmax(p)
    matrix.append(p)
    predictions.append(cl)

我的八门课是:

['yam', 'hak', 'ali', 'udi', 'uri', 'tam', 'ssi', 'iya']

因此,当我在三个列表上运行 for 循环时,它们不匹配:

for i in predictions:
    print(classes[i], matrix[int(i)], i)

ssi [[0. 0. 0. 0. 0. 0. 1. 0.]] 6
ssi [[0. 0. 0. 0. 0. 0. 1. 0.]] 6
ali [[0. 0. 0. 0. 0. 0. 1. 0.]] 2
yam [[0. 0. 0. 0. 0. 0. 1. 0.]] 0
udi [[0. 0. 1. 0. 0. 0. 0. 0.]] 3
ali [[0. 0. 0. 0. 0. 0. 1. 0.]] 2
yam [[0. 0. 0. 0. 0. 0. 1. 0.]] 0
tam [[0. 0. 0. 0. 0. 0. 1. 0.]] 5
uri [[0. 0. 0. 0. 0. 0. 1. 0.]] 4

正如您所见,相同的数组在 argmax 之后被分配了不同的值。对于测试集中的许多看起来是索引 6 的图像,它们被分类为任何东西。我不确定其他课程是否也会发生同样的情况。有人可以解释为什么会发生这种情况,或者我的解释不正确吗?

【问题讨论】:

    标签: numpy tensorflow keras predict


    【解决方案1】:

    我认为您的打印循环是错误的,因为您使用预测类索引而不是实际对应的行来索引matrix。试试这个。

    for cl, preds in zip(predictions, matrix):
        print(classes[cl], preds, cl)
    

    【讨论】:

      猜你喜欢
      • 2019-06-07
      • 1970-01-01
      • 2012-11-25
      • 1970-01-01
      • 1970-01-01
      • 2016-07-17
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      相关资源
      最近更新 更多