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

在咱們看來,計算機就是一臺嚴絲合縫、精密運轉的機器,嚴格按照程序員下達的指令工做。雖然產品上線以後常常碰到迷之問題,但咱們一般會反省程序設計得不夠完美,而不會認爲這是理所固然。由於咱們相信只要程序設計嚴謹,將各類意外狀況考慮在內,就會消除這種不肯定問題。git

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

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

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

其中,Frog類別的機率最大,咱們就認爲這張圖片所屬的類別爲Frog。微信

計算模型準確度的方法也很是簡單:網絡

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

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

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

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

rank-1和rank-5的代碼實現也很是簡單:oop

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

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

理想狀況下,rank-1準確度將與rank-5準確度同步增長,可是在具備挑戰性的數據集上,狀況並不是老是如此。所以,咱們還會檢查rank-5的準確度,以確保咱們的網絡在rank-1準確度停滯不前時仍然在「學習」。

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

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

往期回顧

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

image
相關文章
相關標籤/搜索