class_num=5 # 分类数 confusion_matrix = torchnet.meter.ConfusionMeter(class_num) # 使用torchnet创建5分类混淆矩阵 # 每次完成一次batch 迭代混淆矩阵 for ii, (val_input, label) in enumerate(dataloader): val_input = val_input.to(opt.device) score = model(val_input) confusion_matrix.add(score.detach().squeeze(), label.type(torch.LongTensor)) cm_value = confusion_matrix.value() # 5x5 numpy数组 TP, FN, FP, TN = [[], [], [], []] for i in range(class_num): tp = cm_value[i][i] fn = cm_value[:, i].sum() - cm_value[i][i] fp = cm_value[i, :].sum() - cm_value[i][i] tn = cm_value.sum() - tp - fn - fp TP.append(tp) FN.append(fn) FP.append(fp) TN.append(tn) 计算准确率和Macro-F1''' accuracy = 100. * (sum(TP)) / (cm_value.sum()) # 准确率 Macro_F1s = [] for i in range(class_num): P_i = 0.0 if math.isnan(TP[i] / (TP[i] FP[i])) else 100.*TP[i] / (TP[i] FP[i]) # i类别的准确性 R_i = 0.0 if math.isnan(TP[i] / (TP[i] FN[i])) else 100.*TP[i] / (TP[i] FN[i]) # i类别召回率 F1_i = 0.0 if math.isnan(2 * P_i * R_i / P_i R_i) else 2 * P_i * R_i / P_i R_i Macro_F1s.append(F1_i) Macro_F1s = np.array(Macro_F1s) Macro_F1 = Macro_F1s.mean()
示例代码,不能操作,