Python代码中计算TN(真负例)的实现
以下是关于如何计算TN(真负例)的代码,并解释了TN的计算方法以及它与其他指标(TP、FP、FN)之间的关系。
def eval_net(net, dataset, slicetotal, batch_size=12, gpu=True):
'''Evaluation without the densecrf with the dice coefficient'''
net.eval()
start = time.time()
dice_ = torch.zeros(14).cuda()
jac_ = torch.zeros(14).cuda()
NE = torch.zeros(14).cuda()
JNE = torch.zeros(14).cuda()
accuracy_ = torch.zeros(14).cuda()
precision_ = torch.zeros(14).cuda()
recall_ = torch.zeros(14).cuda()
specificity_ = torch.zeros(14).cuda()
print(1)
with torch.no_grad():
for i, b in enumerate(batch(dataset, batch_size)):
imgs = np.array([k[0] for k in b]).astype(np.float32)
true_masks = np.array([k[1] for k in b])
imgs = torch.from_numpy(imgs)
imgs = imgs.unsqueeze(1)
true_masks = torch.from_numpy(true_masks)
pre_masks_eval = torch.zeros(true_masks.shape[0],14,256,256)
true_masks_eval = torch.zeros(true_masks.shape[0],14,256,256)
batchshape = true_masks.shape[0]
batch_dice = torch.zeros(14).cuda()
if gpu:
imgs = imgs.cuda()
true_masks = true_masks.cuda()
net.cuda()
output_img = net(imgs)
input = output_img.cuda()
pre_masks = input.max(1)[1].float() #索引代表像素所属类别的数字
for ak in range(14):
if ak == 0:
continue
pre_masks_eval[:,ak] = (pre_masks==ak)
true_masks_eval[:,ak] = (true_masks==ak)
premasks = pre_masks_eval[:,ak].view(true_masks.shape[0],-1)
truemasks = true_masks_eval[:,ak].view(true_masks.shape[0],-1)
intersection = premasks * truemasks
TP = intersection.sum(1)
FP = premasks.sum(1) - TP
FN = truemasks.sum(1) - TP
TN = (batchshape - TP - FP - FN)
for bk in range(true_masks.shape[0]):
if TP[bk] == 0 and FP[bk] == 0 and FN[bk] == 0:
NE[ak] += 1
JNE[ak] += 1
else:
batch_dice[ak] = batch_dice[ak] + 2*TP[bk] / (2*TP[bk] + FP[bk] + FN[bk])
jac_[ak] = jac_[ak] + TP[bk] / (TP[bk] + FP[bk] + FN[bk])
dice_ = dice_ + batch_dice
for knum in range(14):
dice_[knum] = dice_[knum] / (slicetotal - NE[knum])
jac_[knum] = jac_[knum] / (slicetotal - JNE[knum])
end = time.time()
print('time used:',end - start)
return dice_,jac_
在上述代码中,我们添加了以下代码来计算TN:
TN = (batchshape - TP - FP - FN)
解释:
- TN 代表真负例(True Negative),表示预测为负例且实际也为负例的样本数。
- TP 代表真阳例(True Positive),表示预测为阳例且实际也为阳例的样本数。
- FP 代表假阳例(False Positive),表示预测为阳例但实际为负例的样本数。
- FN 代表假阴例(False Negative),表示预测为负例但实际为阳例的样本数。
公式:
TN = 总样本数 - TP - FP - FN
代码中,我们将TN的计算添加到循环中,以便为每个类别计算TN。
注意:
- TN是一个标量值,而TP、FP和FN是向量,因为它们是针对每个类别计算的。
- 此代码假设每个样本只属于一个类别。
希望这个解释对您有所帮助。
其他信息:
除了TN外,还有其他一些评估指标,例如准确率、精确率、召回率、特异度等。这些指标可以帮助您更全面地评估模型的性能。您可以根据具体情况选择合适的指标。
示例:
假设您有10个样本,其中5个样本为阳例,5个样本为负例。您的模型预测了3个样本为阳例,其中2个预测正确,1个预测错误。同时,您的模型预测了7个样本为负例,其中5个预测正确,2个预测错误。那么,您的TN为5。
结论:
计算TN可以帮助您更好地理解模型的性能。它与其他指标(TP、FP、FN)一起可以为模型的评估提供更全面的信息。
其他资源:
原文地址: https://www.cveoy.top/t/topic/fRTs 著作权归作者所有。请勿转载和采集!