在深度學習過程中,會經常看見各成熟網絡模型在ImageNet上的Top-1准確率和Top-5准確率的介紹,如下圖所示:

那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,而數字1對應的值為0.8182187,排名第二,故在Top5內。
