在使用深度学习方法进行学习任务的过程中,经常需要输出一些指标来判断学习的情况,并通过tensorboard等工具进行可视化展示。
常见的需要查看的内容有学习率、损失变化情况(分为在训练集和验证集上的损失)、准确率(在训练集和验证集上的损失),灵敏度,特异度,查准率和查全率等。这里将这些指标的代码获取方法进行总结,方便以后使用。
(1)深度学习中的输出结果和标签
score = model(val_input) #得到模型输出结果
probability = t.nn.functional.softmax(score,dim=1) #通过 softmax 函数将输出结果归一化到0-1之间
loss = loss_func(probability, val_label)# 计算模型的损失
这里的probability 基本是浮点型的小数。
使用probablity 和标签可以画出相应的ROC曲线
画图方法见https://www.jianshu.com/p/0daccdb80a62
(2)准确率
train_acc =0
val_num =1
_, predicted = torch.max(probability,1)#返回输入Tensor中每行的最大值,并转换成指定的dim(维度)
train_correct = (predicted == val_label).sum()#统计预测结果和标签一致的数目
train_acc += train_correct.item()
accuracy = train_acc/val_num
(3)灵敏度、特异度、查准率、查全率
TP =0 #(真阳性)被正确诊断为患病的病人。
TN =0 # (真阴性)被正确诊断为健康的健康人。
FP =0 #(假阳性)被错误诊断为患病的健康人。
FN =0 #(假阴性)被错误诊断为健康的病人。
#计算每次迭代过程中的值并叠加
TP += (val_label[predicted==1]==1).type(torch.cuda.FloatTensor).sum()
TN += (val_label[predicted==0]==0).type(torch.cuda.FloatTensor).sum()
FP += (val_label[predicted ==1] ==0).type(torch.cuda.FloatTensor).sum()
FN += (val_label[predicted ==0] ==1).type(torch.cuda.FloatTensor).sum()
print("敏感度为:")
print(TP/(TP + FN))
print("特异度为:")
print(TN/(TN + FP))
print("查准率为:")
print( TP/(TP + FP))
print("查全率为:")
print(TP/(TP + FN))
网友评论