pytorch中訓練完網絡后,需要對學習的結果進行測試。官網上例程用的方法統統都是正確率,使用的是torch.eq()這個函數。
但是為了更精細的評價結果,我們還需要計算其他各個指標。在把官網API翻了一遍之后發現并沒有用于計算TP,TN,FP,FN的函數。。。
在動了無數歪腦筋之后,心想pytorch完全支持numpy,那能不能直接進行判斷,試了一下果然可以,上代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# TP predict 和 label 同時為1 TP + = ((pred_choice = = 1 ) & (target.data = = 1 )).cpu(). sum () # TN predict 和 label 同時為0 TN + = ((pred_choice = = 0 ) & (target.data = = 0 )).cpu(). sum () # FN predict 0 label 1 FN + = ((pred_choice = = 0 ) & (target.data = = 1 )).cpu(). sum () # FP predict 1 label 0 FP + = ((pred_choice = = 1 ) & (target.data = = 0 )).cpu(). sum () p = TP / (TP + FP) r = TP / (TP + FN) F1 = 2 * r * p / (r + p) acc = (TP + TN) / (TP + TN + FP + FN |
這樣就能看到各個指標了。
因為target是Variable所以需要用target.data取到對應的tensor,又因為是在gpu上算的,需要用 .cpu() 移到cpu上。
因為這是一個batch的統計,所以需要用+=累計出整個epoch的統計。當然,在epoch開始之前需要清零
以上這篇在pytorch 中計算精度、回歸率、F1 score等指標的實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/qq_15602569/article/details/79565402