您如何看待每个 class 图像 classification 模型的 TensorFlow 准确度?

How do you see how accurate TensorFlow an image classification model is for each class?

我正在关注张量流网站上的图像 class化教程:https://www.tensorflow.org/tutorials/images/classification

该模型class将花分为 5 种class之一:雏菊、蒲公英、玫瑰、向日葵和郁金香。

我可以看到总体准确度是多少,但有什么方法可以让我知道每个 class 的准确度?

例如,我的模型可能非常擅长预测雏菊、蒲公英、玫瑰和向日葵(准确率接近 100%),但对郁金香的预测很差(接近 0%),但我认为我仍能看到 80%整体准确度(假设 classes 是平衡的)。我需要知道单个 classes 的准确度,以便将该性能与预测所有 classes 的模型的准确度大约相等于 80%。

您只需使用 sklearn 中的分类报告即可做到这一点。

参考Documentation

当我问这个问题时,我没有足够的 python(或 scikit-learn)知识来回答。 classification 报告(如 prashant0598 所建议)接近我需要的,尽管它实际上并不准确。 class化验报告的使用方法如下:

from sklearn.metrics import classification_report
import pandas as pd

y_pred = model.predict(val_ds)
y_pred = np.argmax(y_pred, axis=1)

y_true = np.concatenate([y for x, y in val_ds], axis=0)

cr = classification_report(y_true, y_pred, output_dict=True, target_names=class_names)
pd.DataFrame.from_dict(cr)

classification 报告输出(除其他外)准确率和召回率,这很有帮助。

为了获得 class 的准确度,我们必须多做一些手动操作。这是一种方法:

from sklearn.metrics import accuracy_score

def class_accuracy(class_no):
  pred_filter = y_true==class_no
  acc = accuracy_score(y_true[pred_filter], y_pred[pred_filter])
  return acc

{class_name: class_accuracy(i) for i, class_name in enumerate(class_names)}

{'daisy': 0.6589147286821705,
'dandelion': 0.75,
'roses': 0.6,
'sunflowers': 0.868421052631579,
'tulips': 0.6942675159235668}

所以现在我知道了,向日葵最容易预测,玫瑰特别难预测!