根据 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)
所以我在 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)