[開發技巧]·TopN指標計算方法

[開發技巧]·TopN指標計算方法


1.概念介紹

在圖片分類的中常常能夠看到Top-1,Top-5等TopN準確率(或者時錯誤率)。python

那這個TopN是什麼意思呢?首先Top-1準確率最好理解,就是咱們用argmax從網絡輸出取到的預測index與真實index的準確率。網絡

Top-5準確率就是指從網絡輸出取到的預測機率最大5個index與真實的index進行比對,5個之中任意一個比對成功就算預測正確了。同理Top-3就是指機率最大3個index.app

 

2.問題分析

能夠發現Top-1的準確率很容易計算直接經過argmax就能夠了,演示代碼以下:spa

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能幫到咱們。code

np.argmax的功能就是對list從小到大進行排序,最後輸出排序事後每一個元素原本的下標。下面用代碼來解釋一下:blog

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,正確地完成了咱們設想的功能。ip

相關文章
相關標籤/搜索