gkrisp9
(gkrisp9)
#1
Hi, I am a bit confused about the accuracy on multi label classification.

I have this function for calculating accuracy:

```
def calculate_accuracy(output, target):
"Calculates accuracy"
output = output.data.max(dim=1,keepdim=True)[1]
output = output == 1.0
output = torch.flatten(output)
target = target == 1.0
target = torch.flatten(target)
return torch.true_divide((target == output).sum(dim=0), output.size(0)).item()
```

but when I run it, it gives wrong outputs. For example:

```
x = torch.tensor([[2],[0],[1],[3],[4],[1]])
y = torch.tensor([[2],[1],[1],[4],[3],[2]])
```

calculate_accuracy(x,y) prints 0.6667… where it clearly should print 0.333.

Where have I mess up ?

@gkrisp9

The mistake that you have made is with these two lines

```
output = output == 1.0
target = target == 1.0
```

This is translating the data into

```
tensor([False, False, False, False, False, False])
tensor([False, True, True, False, False, False])
```

Due to this there is a match on 66% of the data and that is what is coming up in your results

1 Like

gkrisp9
(gkrisp9)
#5
Now that I see it again shouldn’t that print 33% ? There are 2 ‘True’ over 6 ‘False’

@gkrisp9

You are not just evaluating True against True. You are also evaluating False against False. Even that is a valid match as per your logic

```
tensor([False, False, False, False, False, False])
tensor([False, True, True, False, False, False])
```

You have 4 matches of False against False and 0 matches of True against True

Final score 4/6

1 Like

gkrisp9
(gkrisp9)
#7
Oh I missed that. Now I got it, thanks a lot again!