根据 softmax 输出选择每个 class 最有信心的数据样本(前 3 个)

To pick the most confident data samples(top 3) per class based on the softmax output

所以我在 50 classes 的特定数据集上训练了一个神经网络。在测试期间,我想从测试数据集中的每个 class 中选择最好的三个样本(最有信心的样本,即:前 3 个或前 5 个样本),我该怎么做?

示例:如果我有 50 个 class,我想从测试数据集中为每个 class 选择 3 个最佳样本(基于 softmax 概率)。因此我们将选择 50*3 个数据样本。我怎样才能以最有效的方式做到这一点?

谢谢。

假设你的最终分数是张量 probabilities 测试数据的形状大小 × 类 的数量,我会这样做:

best_scores, best_classes = probabilities.max(dim=1)

per_class_examples = []
for class_id in range(50):
    # mask telling where class_id class is
    class_positions = best_classes == class_id

    # make sure there are at least three examples,
    # if not, rather take less
    k = min(3, class_positions.sum())

    if k == 0:
        per_class_examples.append([])
    else:
        # set zero score to everything that is not class_id
        _, best_examples = torch.topk(best_scores * class_positions, k, dim=1)
        per_class_examples.append(best_examples)