根据softmax输出,挑选每个类别中最有信心的数据样本(前3名)

我已经在一个包含50个类别的特定数据集上训练了一个神经网络。在测试过程中,我想从测试数据集中为每个类别挑选出最好的三个样本(即最有信心的样本,前3名或前5名)。我该如何做到这一点?

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

谢谢。


回答:

假设你已经将最终分数存储在一个名为probabilities的张量中,其形状为测试数据大小 × 类别数量,我会这样做:

best_scores, best_classes = probabilities.max(dim=1)per_class_examples = []for class_id in range(50):    # 标记class_id类别的位置    class_positions = best_classes == class_id    # 确保至少有三个样本,如果没有,则取更少的    k = min(3, class_positions.sum())    if k == 0:        per_class_examples.append([])    else:        # 将非class_id类别的分数设为零        _, best_examples = torch.topk(best_scores * class_positions, k, dim=1)        per_class_examples.append(best_examples)

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注