【发布时间】: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