【问题标题】:Keras Top 5 predictionsKeras Top 5 预测
【发布时间】:2020-05-16 20:49:50
【问题描述】:

如何在 Keras 中检索来自 model.predict() 的前 5 个预测?它只给出 1 个预测。有什么办法吗?我不希望它作为评估指标。我只需要前 5 个预测。

【问题讨论】:

  • 可能是 predict_on_batch(self, x),它返回一个 numpy 数组,但它不能控制你想要多少预测。

标签: tensorflow deep-learning keras


【解决方案1】:

如果您试图从图像分类问题中获得最佳预测, 您将收到一个热门代码预测。

class_prob = [0.98,0.50,0.60,0.90,0.87,0.79,0.87]
top_values_index = sorted(range(len(class_prob)), key=lambda i: class_prob[i])[-the_top_values_you_want_to_extract:]

您现在拥有所有五个最高值的索引。您现在可以遍历索引并获取类名。

只提取 top_values_without_index

top_values= [class_prob[i] for i in np.argsort(class_prob)[-5:]]

【讨论】:

  • 它有效,我不确定如何提取类概率。我使用 model.predict_proba(X) 而不是 model.predict_classes(X) 获得了类概率。它返回一个 (Test_Samples X No. of Labels) 矩阵,其中包含每个测试样本的所有类别的概率。相应地排序就可以了。
【解决方案2】:

你可以试试下面的代码。

n = 5
y_preds = self.model.predict(x)
y_preds = np.argsort(y_preds, axis=1)[:,-n:]

【讨论】:

    【解决方案3】:

    如果标签是正确类的索引:

    top1 = 0.0
    top5 = 0.0    
    class_probs = model.predict(x)
    for i, l in enumerate(labels):
        class_prob = class_probs[i]
        top_values = (-class_prob).argsort()[:5]
        if top_values[0] == l:
            top1 += 1.0
        if np.isin(np.array([l]), top_values):
            top5 += 1.0
    
    print("top1 acc", top1/len(labels))
    print("top1 acc", top5/len(labels))
    

    【讨论】:

      猜你喜欢
      • 2021-10-06
      • 1970-01-01
      • 2021-08-25
      • 2021-07-24
      • 2017-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多