pytorch神经网络多分类任务计算准确率和Macro-

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()

示例代码,不可运行,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值