python-3.x - 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
?
解决方案
可以在整体模型级别而不是在级别级别计算准确度,而作为精度,可以在级别级别计算召回率。
要计算准确性,您可以使用以下函数
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.]]
从输出中您可以很容易地理解,第一个索引是针对猫的,第二个是针对狗的。
推荐阅读
- javascript - 如何在Javascript中实现letrec?
- python - 带输入元组的二元分类器
- c# - Entity Framework Core 使用 select 和 group by
- android - Android 3.4+ 文件编码错误导致项目加载失败和文件变得不可读
- swift - 如何将 [SCNNode?] 数组添加到 NSUserDefaults?
- kubernetes - 在高负载的情况下将 k8s 部署卸载到不同的集群
- javascript - 假设键相同,如何将一个对象的值添加到另一个对象
- laravel - 当我运行 php artisan db:seed laravel6 时未定义的常量 'App\Product'
- spring-boot - 在以下任何来源中都找不到插件 [id: 'org.springframework.boot', version: '2.2.4.RELEASE']:
- java - 静态块中的 Java 非最终静态映射操作