我有一個包含 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 的影像被分類為任何東西。我不確定其他課程是否也會發生同樣的情況。有人可以解釋為什么會發生這種情況或者我沒有正確解釋嗎?
uj5u.com熱心網友回復:
我認為您的列印回圈是錯誤的,因為您matrix使用的是預測類索引而不是實際的相應行進行索引。嘗試這個。
for cl, preds in zip(predictions, matrix):
print(classes[cl], preds, cl)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/372845.html
