深度学习准确率计算accuracy=torch.eq(y_predict,y_truth.squeeze(dim=-1)).float().mean()

Pytorch中准确率的计算方法解读之:

accuracy=torch.eq(y_predict,y_truth.squeeze(dim=-1)).float().mean()

深度学习过程中经常设计准确率的计算,一般的计算方法都是将预测正确的个数与总的个数相除进行求解,此方法简单,但不足够简洁。因此可以如下更简洁的方法进行计算:

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%

你可能感兴趣的:(pytorch,python,深度学习)