【发布时间】:2020-05-16 20:49:50
【问题描述】:
如何在 Keras 中检索来自 model.predict() 的前 5 个预测?它只给出 1 个预测。有什么办法吗?我不希望它作为评估指标。我只需要前 5 个预测。
【问题讨论】:
-
可能是
predict_on_batch(self, x),它返回一个 numpy 数组,但它不能控制你想要多少预测。
标签: tensorflow deep-learning keras
如何在 Keras 中检索来自 model.predict() 的前 5 个预测?它只给出 1 个预测。有什么办法吗?我不希望它作为评估指标。我只需要前 5 个预测。
【问题讨论】:
predict_on_batch(self, x),它返回一个 numpy 数组,但它不能控制你想要多少预测。
标签: tensorflow deep-learning keras
如果您试图从图像分类问题中获得最佳预测, 您将收到一个热门代码预测。
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:]]
【讨论】:
你可以试试下面的代码。
n = 5
y_preds = self.model.predict(x)
y_preds = np.argsort(y_preds, axis=1)[:,-n:]
【讨论】:
如果标签是正确类的索引:
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))
【讨论】: