0

My model have more than 1k classes, and the method returns an array with probabilities, most of which are 0. I want to get top 3 predictions with their probabilities. How can i implement this? I expect to get something like this:

[{class: proba}, {class: proba}, {class: proba}]
Danissimo
  • 21
  • 3

1 Answers1

2

Assuming it's one sample:

{k: probs[k] for k in reversed(np.argpartition(probs,-3)[-3:])}

For a larger test set it'll grow into something like:

[{k: p[k] for k in reversed(np.argpartition(p,-3)[-3:])} for p in probs]    

argpartition is like argsort but would only sort out 3 indices with largest values in this notation, saving you some complexity.

Or, if you don't mind importing torch just for this, it's got a nice .topk() method for tensors.

dx2-66
  • 2,376
  • 2
  • 4
  • 14