首页 > 解决方案 > keras:: 如何找到分类准确度?

问题描述

我有一个data-set包含两种类型的对象。让我们说"cat""dog"。我想class-wise在 Keras 中找到准确性。这就是我所做的;

from sklearn.metrics import classification_report
import numpy as np
Y_test = np.argmax(y_val, axis=1) # Convert one-hot to index
y_pred = model.predict_classes(x_val)
print(classification_report(Y_test, y_pred))

我得到了这样的输出;

在此处输入图像描述

从这个输出 ( 0, 1) 我怎么知道哪个属于 class cat,哪个属于 class dog

标签: python-3.xtensorflowkerasconv-neural-networkprecision-recall

解决方案


可以在整体模型级别而不是在级别级别计算准确度,而作为精度,可以在级别级别计算召回率。

要计算准确性,您可以使用以下函数

keras.metrics.accuracy(y_true, y_pred)

您可以在下面添加target_names参数classification_report以了解标签。

target_names = ["Class {}".format(i) for i in range(num_classes)]
print(classification_report(Y_test, y_pred, target_names=target_names))

还有另一种方法可以打印标签并了解第一个和第二个索引代表什么。这是示例

import numpy as np
from sklearn.preprocessing import LabelBinarizer
from tensorflow.keras.utils import to_categorical

# define example
data = ['dog', 'dog', 'cat', 'dog', 'cat', 'cat', 'dog', 'cat', 'dog', 'dog']

values = np.array(data)

#Binary encode
lb = LabelBinarizer()

labels = lb.fit_transform(values)
labels = to_categorical(labels)
print("which position represents for cat and dog?:")
print("Data is:",data)
print(labels)

输出:

which position represents for cat and dog?:
Data is: ['dog', 'dog', 'cat', 'dog', 'cat', 'cat', 'dog', 'cat', 'dog', 'dog']
[[0. 1.]
 [0. 1.]
 [1. 0.]
 [0. 1.]
 [1. 0.]
 [1. 0.]
 [0. 1.]
 [1. 0.]
 [0. 1.]
 [0. 1.]]

从输出中您可以很容易地理解,第一个索引是针对猫的,第二个是针对狗的。


推荐阅读