根据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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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