首页 > 解决方案 > 使用 keras 将预测图像类与实际图像类进行比较

问题描述

我正在训练一个 keras 模型来识别猫、狗和马的图像。

到目前为止,我已经对我的数据进行了一次热编码(因为这是一个多类分类问题),训练了我的模型并调用了预测。

def read_and_process_images(list_of_images):
X = [] #images
y = [] #labels

for image in list_of_images:
    try:
        X.append(cv2.resize(cv2.imread(image, cv2.IMREAD_COLOR),(nrows, ncolumns), interpolation = cv2.INTER_CUBIC))
        if 'dog' in image:
            y.append(0)
        elif 'cat' in image:
            y.append(1)
        elif 'horse' in image:
            y.append(2)
    except Exception as e:
        print(str(e))

return X, y

...

X_test, y_test = read_and_process_images(test_imgs)
x = np.array(X_test)
test_datagen = ImageDataGenerator(rescale = 1./255)

i = 0
text_labels = []

plt.figure(figsize = (30,20))
for batch in test_datagen.flow(x, batch_size = 1):
    pred = model.predict(batch)
    print(np.argmax(pred))
    if np.argmax(pred) == 0 :
        text_labels.append('dog')
    elif np.argmax(pred) == 1:
        text_labels.append('cat')
    else:
        text_labels.append('horse')
    plt.subplot(5 / columns + 1, columns, i+1)
    plt.title('I think this is a ' + text_labels[i])
    imgplot = plt.imshow(batch[0])
    i += 1
    if i % 10 == 0:
         break

 plt.show()

该模型似乎运行良好。我通常会得到 7-10 个正确的预测,具体取决于批量大小。但是,我不明白 model.predict 如何选择批次,因此无法将实际值与预测值进行比较。当我尝试执行以下操作时:

y_pred = model.predict(x, batch_size=1)
matrix = confusion_matrix(y_test, y_pred.argmax(axis=1))

我得到的混淆矩阵完全是荒谬的(例如它告诉我它只有一只猫是正确的,但我可以清楚地看到一些批次它得到了更多正确)。有人可以向我解释一下 .predict 函数是如何选择批次的,以及我如何成功地将预测值与实际测试值进行比较?先感谢您。

标签: pythonmachine-learningkerascomputer-vision

解决方案


推荐阅读