本文簡單介紹模型訓練時候,使用准確率求解過程,不涉及精確率和召回率計算,
本文給出簡要計算方法與代碼。
計算方法:
使用top1計算為例(以下以2個batch,3個num_classes舉列):
網絡預測結果形式:pred=[b,num_classes] ,如pred=[[0.6,0.8,0.9],[0.7,0.4,0.3]]
真實標簽形式:label=[b],如batch[1,0]
公式:預測正確/預測個數(即batch)
計算步驟:
步驟1:從pred找到預測最好的分別為[0.9,0.7],可知類別為[2,0]
步驟2:依次比較預測與label是否匹[2,0]--[1,0],可知第二個預測正確,則預測正確為1
步驟3:計算准確率為:1/2=50%
計算代碼:
import torch def accuracy(output, target, topk=(1,)): maxk = max(topk) # topk=(1,)取top1准確率,topk=(1,5)取top1和top5准確率 batch_size = target.size(0) _, pred = output.topk(maxk, 1, True, True) # topk參數中,maxk取得是top1准確率,dim=1是按行取值, largest=1是取最大值 pred = pred.t() # 轉置 correct = pred.eq(target.view(1, -1).expand_as(pred)).contiguous() # 比較是否相等 res = [] for k in topk: correct_k = correct[:k].view(-1).float().sum(0) res.append(correct_k.mul_(1 / batch_size)) return res import numpy as np if __name__ == '__main__': N=60 # batch C=9 # 類別 pred=np.random.rand(N,C) pred=torch.from_numpy(pred) label=np.random.randint(0,2,N) label=torch.from_numpy(label) r=accuracy(pred, label, topk=(1,5)) # topk=(1,5) 表示求解top1與top5的分類准確率 print(r) # print(label) # print(pred)
結果顯示: