深度学习过程中经常设计准确率的计算,一般的计算方法都是将预测正确的个数与总的个数相除进行求解,此方法简单,但不足够简洁。因此可以如下更简洁的方法进行计算:
accuracy=torch.eq(y_predict,y_truth.squeeze(dim=-1)).float().mean()
在这里边y_predict为预测标签值,y_truth为真实标签值。
# 首先设定预测标签和真实标签的值
y_predict=torch.tensor([1,3,3,4,4,6,7,8,9,10])
y_truth=torch.arange(1,11).view(10,1)
# 打印结果如下
print(y_predict,y_truth)
tensor([ 1, 3, 3, 4, 4, 6, 7, 8, 9, 10])
tensor([[ 1],
[ 2],
[ 3],
[ 4],
[ 5],
[ 6],
[ 7],
[ 8],
[ 9],
[10]])
由于y_truth通常为一个二维张量,需要将最后一维去除。
y_squeeze=y_truth.squeeze(dim=-1)#若最后一维为1则去除
# 打印降维后的结果
print(y_squeeze)
tensor([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
紧接着利用torch.eq()计算,依次比较y_predict与y_truth中的每一个元素,相同返回True不同返回Flase,最后经过torch.eq()计算得到一个bool型张量。
# torch.eq()函数,相同为True 不同为Flase
print(torch.eq(y_predict,y_truth.squeeze(dim=-1)))
tensor([ True, False, True, True, False, True, True, True, True, True])
紧接着通过.float()将数据类型转换成float型。
print(torch.eq(y_predict,y_truth.squeeze(dim=-1)).float())
tensor([1., 0., 1., 1., 0., 1., 1., 1., 1., 1.])
最后利用torch.mean()函数即可得到最后的准确率,其中mean()的计算过程为将所有元素相加再除以元素的总个数。
print(torch.eq(y_predict,y_truth.squeeze(dim=-1)).float().mean())
tensor(0.8000)#准确率为80%