Pytorch 트레이닝 모델이 출력된 후 F1-Score 및 AUC 작업을 계산합니다.

1, 계산 F1-Score


두 가지 분류에 있어batchsize의 크기가 64라고 가정하면 모델 하나의batch의 출력은torch가 되어야 한다.size([64,2]), 그래서 우선 이 2차원 행렬의 각 줄의 최대 인덱스 값을 얻어서 하나의 목록에 추가하고, 라벨도 하나의 목록에 추가하고, 마지막에 sklearn에서 F1을 계산하는 도구 패키지를 사용하여 계산합니다. 코드는 다음과 같습니다.

import numpy as np
import sklearn.metrics import f1_score
prob_all = []
lable_all = []
for i, (data,label) in tqdm(train_data_loader):
    prob = model(data) # 
    prob = prob.cpu().numpy() # prob CPU , numpy, CPU CPU 
    prob_all.extend(np.argmax(prob,axis=1)) # 
    label_all.extend(label)
print("F1-Score:{:.4f}".format(f1_score(label_all,prob_all)))

2, AUC 계산


AUC를 계산할 때 이번 사용은 sklearn의 roc_auc_score () 메서드
입력 매개변수:y_true: 실제 레이블입니다.모양 (nusamples,) 또는 (nusamples, nuclasses).이분류의 형상 (nusamples, 1), 다중 라벨 상황의 형상 (nusamples, nuclasses).y_score: 목표 점수.모양 (nusamples,) 또는 (nusamples, nuclasses).두 번째 분류 상황 형상(n_samples, 1),'점수는 반드시 비교적 큰 라벨을 가진 종류의 점수여야 한다'는 통속적인 이해: 모델이 점수를 매기는 두 번째 열.예를 들어 모델 입력의 득점은 하나의 수조[0.98361170.01638886]이고 색인은 그 종류이다. 여기서'비교적 큰 라벨류의 점수'는 색인이 1인 점수를 가리킨다. 0.01638886, 즉 정례적인 예측 득점이다.average='macro': 두 번째 분류를 할 때 이 매개 변수는 무시할 수 있습니다.다중 분류에 사용됩니다.'micro': 라벨 지표 행렬의 모든 요소를 하나의 라벨로 보고 전역의 지표를 계산합니다.'macro': 모든 탭의 지표를 계산하고 그것들의 가중치 평균값을 찾습니다.이것은 결코 라벨의 불균형을 고려하지 않았다.weighted': 모든 라벨의 지표를 계산하고 그들의 평균 값을 찾아 지지도(라벨의 실제 실례의 수량)에 따라 가중합니다.sample_weight=None: 샘플의 무게.모양(n_samples,), 기본 = 없음.max_fpr=None :multi_class='raise': (다분류 문제는 다음 글에서 설명)labels=None :
출력:auc: 플로트의 값입니다.

import numpy as np
import sklearn.metrics import roc_auc_score
prob_all = []
lable_all = []
for i, (data,label) in tqdm(train_data_loader):
    prob = model(data) # 
    prob_all.extend(prob[:,1].cpu().numpy()) #prob[:,1] , ,y_score , , 
    label_all.extend(label)
print("AUC:{:.4f}".format(roc_auc_score(label_all,prob_all)))
보충:pytorch 훈련 모형의 일부 구덩이

1. 이미지 읽기


opencv의python과 c++가 읽는 이미지 결과가 일치하지 않는 것은python과 c++가 사용하는opencv 버전이 다르기 때문에 사용하는 디코딩 라이브러리가 다르기 때문에 읽는 결과가 다르기 때문입니다.

2. 이미지 변환


PIL과pytorch의 이미지resize 조작은 Opencv의resize 결과와 다르다. 그러면 훈련은 PIL을 사용하고 예측할 때opencv를 사용하는데 결과의 차이가 매우 크다. 특히 검측과 분할 임무에서 비교적 뚜렷하다.

3. 수치 계산


pytorch의 torch.exp와 c++의 exp 계산은 10e-6의 수치에 10e-3의 오차가 있기 때문에 고정밀 계산에 특히 주의해야 한다. 예를 들어
두 개의 입력은 5.601597, 5.601601이고 exp 계산을 거친 후 270.85862343143174270.85970686809225로 변했다
이상의 개인적인 경험으로 여러분께 참고가 되었으면 좋겠습니다. 또한 많은 응원 부탁드립니다.

좋은 웹페이지 즐겨찾기