def accu(output, target, topk=(1,)):
"""Computes the accuracy over the k top predictions for the specified values of k"""
with torch.no_grad():
maxk = max(topk)
batch_size = target.size(0) # 获取数据总量
_, pred = output.topk(maxk, 1, True, True) #获取概率前topk
pred = pred.t()
correct = pred.eq(target.view(1, -1).expand_as(pred))
res = []
for k in topk:
correct_k = correct[:k].contiguous().view(-1).float().sum(0, keepdim=True)
res.append(correct_k.mul_(100.0 / batch_size))
return res
运行;
y_test = torch.tensor(y_test)
y_pred_proba = clf.predict_proba(X_test)
y_pred_proba = torch.tensor(y_pred_proba)
top1, top5=accu(y_pred_proba, y_test, topk=(1,5))
print('top1[0],top5[0]',top1[0].item(),top5[0])
#top1[0],top5[0] tensor(68.0489) tensor(97.3357)
y_pred_proba:是二维数组,体现了每个类别的概率、
输入是模型输出y_pred_proba(batch_size×num_of_class),目标y_test(num_of_class向量),元组(分别向求top几)
torch.eq().sum()就是将所有值相加,但得到的仍是tensor.
torch.eq().sum()得到的结果就是[ ]。
torch.eq().sum().item()得到某个数值。