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

卷积神经网络(CNN)输出含义解析:非0/1输出疑问

关于CNN输出非0/1值的问题解答

嘿,刚接触机器学习的朋友常会遇到这个困惑,我来给你拆解清楚:

为什么你的模型不是输出纯0或1?

你印象中“输出1对应目标类别、其余为0”是最终的硬分类标签结果,但模型在训练(甚至多数推理场景)时,输出的是经过Softmax层计算后的概率分布值:

  • Softmax层的作用是把模型最后一层的原始输出(logits)转化为0到1之间的数值,所有类别的数值总和接近1,代表模型对每个类别的置信度。
  • 训练阶段必须依赖这种连续的概率值来计算损失(比如交叉熵损失),如果直接输出离散的0/1,根本没办法通过反向传播优化模型参数——离散值的梯度是不存在的。

你的输出结果到底是什么意思?

看你给出的输出:[[1.00000000e+00, 1.02304026e-20, 0.00000000e+00]]

  • 第一个值1.0:代表模型对“类别1”的置信度几乎是100%(受浮点数精度限制显示为1.0)
  • 第二个值1.02304026e-20:这是一个极小的数(相当于0.000...001,前面有20个0),几乎可以等同于0,是模型对第二个类别的置信度——因为模型极度确定是类别1,所以这个值被压缩到趋近于0
  • 第三个值0.0:模型对第三个类别的置信度直接为0

这些都是Softmax计算后的正常结果,只是因为模型对正确类别太自信,其他类的概率被压到几乎为0,仅因浮点数精度限制没有严格显示为0(比如那个1e-20)。

怎么得到你想要的0/1输出?

如果需要把概率输出转化为0/1的硬分类标签,最常用的两种方式:

  • 取概率最大的类别:针对你的输出,最大概率在第一个位置,标记为类别1(对应1),其余类别标记为0
  • 设置阈值:把概率大于某个值(比如0.5)的标记为1,其余为0(但这种场景下argmax的方式更准确)

举个Python代码的例子:

import numpy as np
output = np.array([[1.00000000e+00, 1.02304026e-20, 0.00000000e+00]])
# 生成硬分类标签
hard_labels = np.zeros_like(output)
hard_labels[np.arange(len(output)), np.argmax(output, axis=1)] = 1
print(hard_labels)
# 输出结果:[[1 0 0]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:45:56