如何在Keras中设置预测阈值并筛选二分类高置信度样本?
在Keras中设置预测阈值 & 筛选高置信度图像
一、自定义预测阈值超简单
Keras做二分类时,默认用sigmoid激活输出层,模型会给出每个样本属于类别1的概率值(范围0到1),默认判定阈值是0.5,但你完全可以根据需求自定义,步骤很直观:
- 先获取所有样本的预测概率:
# 假设images是你预处理好的测试图像数组 predict_probs = model.predict(images)
这里predict_probs是形状为(样本数量, 1)的数组,每个元素对应图像属于类别1的概率。
- 用自定义阈值生成最终标签:
比如你觉得0.5的阈值太宽松,想把阈值调到0.7,只把概率≥0.7的图像判定为1:
my_threshold = 0.7 predict_labels = (predict_probs >= my_threshold).astype(int)
这样就完成了自定义阈值的分类判断,调整阈值也只需要改一个数值就行。
二、当然能筛选最可能为1的图像!
通过概率分数排序筛选是最直接的方式,操作也不复杂:
- 把概率和图像索引绑定:
这样排序后还能精准找到对应的原始图像:
# 将每个图像的索引与对应的概率配对 prob_index_pairs = list(enumerate(predict_probs.flatten()))
- 按概率从高到低排序:
# 降序排列,让概率最高的样本排在最前面 sorted_pairs = sorted(prob_index_pairs, key=lambda x: x[1], reverse=True)
- 提取Top N高置信度图像:
比如你要取概率最高的前15张:
top_n = 15 # 拿到这些高置信度图像的索引 top_image_indices = [idx for idx, prob in sorted_pairs[:top_n]] # 从原始图像数组中取出对应的图像 top_confident_images = images[top_image_indices] # 还可以顺便获取它们的置信度分数 top_confidence_scores = [prob for idx, prob in sorted_pairs[:top_n]]
这样你就得到了最符合类别1特征的一批图像,还能看到它们的具体置信度数值。
小提醒
- 阈值选择要贴合你的需求:如果怕把非1的图像误判成1,就调高阈值;如果不想漏掉任何可能是1的图像,就降低阈值。
- 没必要特意修改模型结构来集成阈值逻辑,手动处理概率的方式更灵活,随时调整阈值都不用重新训练模型。
内容的提问来源于stack exchange,提问作者percy
相关产品推荐
相关产品推荐

