那Top-1 Accuracy和Top-5 Accuracy是指什么呢?
ImageNet有大概1000个分类,而模型预测某张图片时,会分别给出预测为这1000个类别的概率,并按概率从高到低的类别排名。
Top-1 Accuracy是指预测概率排名第一的类别的与实际结果相符的准确率。
Top-5 Accuracy是指预测概率排名前五的类别 包含 实际结果的准确率。(注意是:预测概率排名前五中有一个是实际的结果,就认为是正确)
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,故Top1为Flase。而数字1对应的值为0.8182187,排名第二,故在Top5内,故Top5为True。