You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取CNN神经网络分类预测结果的置信度/类别概率

文本CNN分类模型预测置信度获取方案

核心原理

你的模型最后输出层使用softmax激活函数,调用model.predict()得到的返回值本身就是所有类别的概率分布数组,不需要修改模型结构或者重新训练,只需要调整预测阶段的取值逻辑就能拿到置信度。

原有逻辑问题

  • model.predict(x)返回的数组形状为(输入样本数, 类别总数),数组中每个元素的取值范围是0~1,对应样本属于该类别的概率,单条样本所有类别概率和为1
  • 原有逻辑直接对返回结果调用argmax(axis=1)只取了最大概率对应的类别索引,丢弃了索引位置对应的概率数值,因此拿不到置信度。

可直接复用的实现代码

修改后的单样本预测逻辑

x = x.lower()
x = remove_URL(x)
x = remove_punct(x)
x = remove_stopwords(x)
    
x = tokenizer.texts_to_sequences([x])
x = pad_sequences(x, maxlen=maxlen)
# 拿到所有类别的概率分布
pred_probs = model.predict(x, verbose=0)
# 取概率最高的类别索引
pred_idx = pred_probs.argmax(axis=1)[0]
# 取该索引对应的概率值,即为当前预测结果的置信度
pred_confidence = pred_probs[0][pred_idx]
# 索引映射为实际类别名
pred_class = le.classes_[pred_idx]

# 按需返回结果,示例为返回类别名+对应置信度
return pred_class, round(float(pred_confidence), 4)

批量预测场景快速取值

如果是批量预测多条样本,不需要逐样本遍历,可以直接批量拿到所有样本的预测类别和对应置信度:

# 批量输入得到概率分布
batch_pred_probs = model.predict(batch_x, verbose=0)
# 批量取每个样本的预测类别索引
batch_pred_idx = batch_pred_probs.argmax(axis=1)
# 批量取每个样本预测类别的置信度
batch_pred_conf = batch_pred_probs.max(axis=1)
# 批量映射类别名
batch_pred_class = le.classes_[batch_pred_idx]

扩展用法

如果需要拿到单条样本所有类别的对应概率,可以直接将概率数组和类别名打包为字典:

all_class_prob = dict(zip(le.classes_, pred_probs[0]))

内容的提问来源于stack exchange,提问作者Test

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 18:42:38