聊一聊rank 1和rank 5準確度

2021-09-10 07:50:06 字數 2059 閱讀 3239

在我們看來,計算機就是一台嚴絲合縫、精密運轉的機器,嚴格按照程式設計師下達的指令工作。雖然產品上線之後經常碰到迷之問題,但我們通常會檢討程式設計得不夠完美,而不會認為這是理所當然。因為我們相信只要程式設計嚴謹,將各種意外情況考慮在內,就會消除這種不確定問題。

然而到了機器學習,特別是深度學習,很多結果都是以概率的形式提供的。就拿分類來說,通常模型**出屬於每個類別的概率,而不是直接給出乙個確定的結果。這就如同天氣預報員預報明天的天氣:晴天的概率多少多少,下雨的概率多少多少。估計如果這樣預報天氣,很多人會抓狂。問題是,天氣預報說明天是晴天,明天就一定是晴天嗎?這其實仍然是乙個概率問題。雖然我們掌握了足夠的氣象資料,天氣預報也越來越準確,但是我們依然無法保證每次都是準確的。

既然在深度學習中分類問題是各類別的概率,我們很容易選擇一種策略:某個類別的概率最高,我們就認為**結果屬於哪種類別。比如下面這張蛙的:

使用cifar-10資料集訓練出的模型進行推斷,各個類別的概率如下:

其中,frog類別的概率最大,我們就認為這張所屬的類別為frog。

計算模型準確度的方法也非常簡單:

這種度量也稱之為rank-1準確度,這也是一種非常直觀的度量方式。然而,最近幾乎所有在imagenet資料集上評估的機器學習模型的**都不僅給出了rank-1準確度,還給出了rank-5準確度。

顧名思義,rank-5準確度選取5個最大概率的類別,只要這5個類別中的乙個和真實標籤相同,該**結果就為真。rank-5準確度的計算方法如下:

rank-1和rank-5的**實現也非常簡單:

def rank5_accuracy(preds, labels):

# initialize the rank-1 and rank-5 accuracies

rank1 = 0

rank5 = 0

# loop over the predictions and ground-truth labels

for (p, gt) in zip(preds, labels):

# sort the probabilities by their index in descending

# order so that the more confident guesses are at the

# front of the list

p = np.argsort(p)[::-1]

if gt in p[:5]:

rank5 += 1

if gt == p[0]:

rank1 +=1

# compute the final rank-1 and rank-5 accuracies

rank1 /= float(len(labels))

rank5 /= float(len(labels))

return (rank1, rank5)

有朋友可能會覺得,這個機器學習也太不靠譜了吧!不能給出乙個精確的結果也就算了,還給出5個模凌兩可的答案。在cifar-10這樣的小資料集上,因為總的類別很少,如果還統計rank-5準確率,的確有點傻,但是考慮到imagenet這樣超大規模的資料集,其類別有成千上萬個,特別是某些較小的類目,比如如下兩張:

普通人也很難分辨出其類別不同。所以在某些大型分類模型任務中,rank-5準確率可以提供乙個對rank-1準確率的乙個補充。

理想情況下,rank-1準確度將與rank-5準確度同步增加,但是在具有挑戰性的資料集上,情況並非總是如此。因此,我們還會檢查rank-5的準確度,以確保我們的網路在rank-1準確度停滯不前時仍然在「學習」。

往期回顧

站在巨人的肩膀上:遷移學習

使用資料增強技術提公升模型泛化能力

計算機視覺與深度學習,看這本書就夠了

聊一聊rank 1和rank 5準確度

在我們看來,計算機就是一台嚴絲合縫 精密運轉的機器,嚴格按照程式設計師下達的指令工作。雖然產品上線之後經常碰到迷之問題,但我們通常會檢討程式設計得不夠完美,而不會認為這是理所當然。因為我們相信只要程式設計嚴謹,將各種意外情況考慮在內,就會消除這種不確定問題。然而到了機器學習,特別是深度學習,很多結果...

No 1 聊一聊資料獲取和爬蟲

為什麼要把資料獲取 爬蟲放在一起來聊呢?居士是想成為一名資料科學家的!資料科學家就要具備很多的技能,什麼統計學 資料探勘 資料倉儲 大資料計算 資料視覺化等等。但是,首先我們要有資料,沒有資料我們玩什麼?想要玩資料,我們就要來聊一下資料獲取,資料獲取有很多途徑,爬蟲算是其中最自力更生的技能了,而實現...

聊一聊抽象類和介面

什麼是抽象類 乙個允許有抽象定義存在的類,可以像普通類一樣有屬性,成員方法,建構函式。只有方法的宣告,沒有方法的實現。也可以有預設的方法實現。怎樣定義抽象類訪問修飾符 abstract class 類名 抽象方法的作用為了約束當前方法都具有某種行為 注意 1.抽象類必須使用關鍵字宣告。2.抽象類不可...