聊一聊rank-1和rank-5準確度

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

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

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

image

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

image

其中,Frog類別的概率最大,我們就認爲這張圖片所屬的類別爲Frog。

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

  • 步驟#1:計算數據集中每個輸入圖像的類別標籤的概率。
  • 步驟#2:確定真實標籤是否等於具有最大概率的預測類別標籤。
  • 步驟#3:計算步驟#2爲真的次數,然後除以總的測試圖片數量。

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

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

  • 步驟#1:計算數據集中每個輸入圖像的類別標籤的概率。
  • 步驟#2:按降序對預測的類別標籤概率進行排序。
  • 步驟#3:確定真實標籤是否存在於步驟#2的前5個預測標籤中。
  • 步驟#4:計算步驟#3爲真的次數,然後除以總的測試圖片數量。

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這樣超大規模的數據集,其類別有成千上萬個,特別是某些較小的類目,比如如下兩張圖片:

image

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

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

以上實例均有完整的代碼,點擊閱讀原文,跳轉到我在github上建的示例代碼。

另外,我在閱讀《Deep Learning for Computer Vision with Python》這本書,在微信公衆號後臺回覆“計算機視覺”關鍵字,可以免費下載這本書的電子版。

往期回顧

  1. 站在巨人的肩膀上:遷移學習
  2. 使用數據增強技術提升模型泛化能力
  3. 計算機視覺與深度學習,看這本書就夠了

image

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章