在深度学习过程中,会经常看见各成熟网络模型在 ImageNet 上的 Top-1 准确率和 Top-5 准确率的介绍,如下图所示:
那 Top-1 Accuracy 和 Top-5 Accuracy 是指什么呢?区别在哪呢?
举个例子,比如你训练好了一个网络,你要用这个网络去进行图片分类任务,假设要分类的数目有 50 类,那么当我们进行测试时,输入一张图片,网络会依次输出这 50 个类别的概率,当所有图片测试完成后,TOP-5 就是,在测试图片的 50 个分类概率中,取前面 5 个最大的分类概率,正确的标签(分类)有没有在里面,就是它是不是这前 5 个中的一个,如果是,就是分类成功.
TOP-5 正确率 =(所有测试图片中正确标签包含在前五个分类概率中的个数)除以(总的测试图片数)
TOP-5 错误率 =(所有测试图片中正确标签不在前五个概率中的个数)除以(总的测试图片数)
同理,TOP-1 错误率就是正确标记的样本数不是最佳概率的样本数除以总的样本数
下面的代码可更为直观地说明其中的区别:
import numpy as np
import tensorflow.keras.backend as K
# 随机输出数字0~9的概率分布
output = K.random_uniform_variable(shape=(1, 10), low=0, high=1)
# 实际结果假设为数字1
actual_pos = K.variable(np.array([1]), dtype='int32')
print("数字0~9的预测概率分布为:", K.eval(output))
print("实际结果为数字:", K.eval(actual_pos))
print("实际结果是否in top 1: ", K.eval(K.in_top_k(output, actual_pos, 1)))
print("实际结果是否in top 5: ", K.eval(K.in_top_k(output, actual_pos, 5)))
运行后再看看结果为:
数字0~9的预测概率分布为: [[0.301023 0.8182187 0.71007144 0.80164504 0.7268218 0.58599055 0.19250274 0.9076816 0.8101771 0.49439466]]
实际结果为数字: [1]
实际结果是否in top 1: [False]
实际结果是否in top 5: [ True]
从结果上看,output中排名最高的值为0.9076816,其对应的数字为7,而实际数字为1,故不在Top1,而数字1对应的值为0.8182187,排名第二,故在Top5内。
参考链接:
https://blog.csdn.net/qq_26413875/article/details/100542817
https://www.cnblogs.com/hutao722/p/9625591.html