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

为何categorical_crossentropy输出为16.118?数学原理存疑

TensorFlow分类交叉熵计算的疑问解答

问题1:为何log(0)没有引发错误,反而得到16.118的结果?

TensorFlow的categorical_crossentropy为了避免数值不稳定(比如log(0)导致的无穷大或计算错误),会对输入的预测概率值做数值裁剪处理:它会将所有预测值限制在[1e-7, 1-1e-7]的范围内,不会直接使用原始的0或1。

在你的例子中,y_pred_one_hot里索引1位置的0会被替换成近似0的极小值(比如1e-7),计算log(1e-7)得到约-16.118,再加上公式里的负号,最终得到16.118,这就是你看到的结果。

问题2:y_true与y_pred的0值索引重合,求和结果为何不为0?

标准分类交叉熵公式为:
$$H(y_{true}, y_{pred}) = -\sum_{i} y_{true,i} \times \log(y_{pred,i})$$
注意公式中只有当y_true,i=1的项才会被保留(其他项乘以0后直接消失)。你的y_true_one_hot中只有索引1位置是1,所以只需要计算该位置的项:
$$-1 \times \log(y_{pred,1})$$
而y_pred,1是0(被裁剪为极小值),所以计算结果是一个较大的正数,而非0。那些0值索引重合的位置,因为y_true,i=0,对应的项都为0,根本不参与求和计算,所以不会让结果变成0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:23:24