[開發技巧]·TopN指標計算方法
阿新 • • 發佈:2019-05-13
[開發技巧]·TopN指標計算方法
1.概念介紹
在圖片分類的中經常可以看到Top-1,Top-5等TopN準確率(或者時錯誤率)。
那這個TopN是什麼意思呢?首先Top-1準確率最好理解,就是我們用argmax從網路輸出取到的預測index與真實index的準確率。
Top-5準確率就是指從網路輸出取到的預測概率最大5個index與真實的index進行比對,5個之中任意一個比對成功就算預測正確了。同理Top-3就是指概率最大3個index.
2.問題分析
可以發現Top-1的準確率很容易計算直接通過argmax就可以了,演示程式碼如下:
import numpy as np lists = np.array([0.4,0.2,0.3,0.1]) index = np.argmax(lists) score = lists[index]
大於1的時候就沒法使用argmax了,其實在Numpy中有argsort能幫到我們。
np.argmax的功能就是對list從小到大進行排序,最後輸出排序過後每個元素本來的下標。下面用程式碼來解釋一下:
import numpy as np lists = np.array([0.4,0.2,0.3,0.1]) indexs = np.argsort(lists) print(indexs) # [3 1 2 0]
結果怎麼理解呢?其實第一步先對[0.4,0.2,0.3,0.1] -->[0.1,0.2,0.3,0.4]排序,再對排序好的[0.1,0.2,0.3,0.4]找出每個元素原始下標,例如0.1的原始下標為3,0.2的下標為2 .. 最終得到[3 1 2 0]
這個怎麼應用到TopN計算中呢?其實就很容易了,可以利用argsort取得排好序元素的下標,再通過下標找到對應的概率值即可:以Top-3指標舉例
import numpy as np lists = np.array([0.4,0.2,0.3,0.1]) def get_top_n(lists,n): sort_index = np.argsort(lists) n_index = sort_index[-n:]#因為是按照概率從大到小取n個 indexs = [] scores = [] for index in reversed(n_index):#從大到小取,所以通過reversed()倒置一下 indexs.append(index) scores.append(lists[index]) return(indexs,socres) indexs,scores = get_top_n(lists,3) print(indexs,scores) #[0, 2, 1] [0.4, 0.3, 0.2]
輸出結果是[0, 2, 1] [0.4, 0.3, 0.2],表示0的種類概率0.4,正確地完成了我們設想的功