首页 > 解决方案 > Keras 分类交叉熵

问题描述

我正试图围绕分类交叉熵损失。看一下Keras 中交叉熵损失的实现:

  # scale preds so that the class probas of each sample sum to 1
  output = output / math_ops.reduce_sum(output, axis, True)
  # Compute cross entropy from probabilities.
  epsilon_ = _constant_to_tensor(epsilon(), output.dtype.base_dtype)
  output = clip_ops.clip_by_value(output, epsilon_, 1. - epsilon_)
  return -math_ops.reduce_sum(target * math_ops.log(output), axis)

我看不到 delta = output - target 的计算位置。见这里。我错过了什么?

标签: pythonkeras

解决方案


我认为您可能在这里混淆了两个不同的概念/事件。

分类交叉熵损失是模型误差的度量,计算公式为:

def categorical_crossentropy(target, output, from_logits=False, axis=-1):
     <etc>

这只是为每个标签返回一组损失,它是真实标签与您的模型认为标签应该是什么之间的直接区别。

计算损失(前向传播阶段的一部分)之后的下一步是开始反向传播,即我们要找到每个权重/偏差矩阵对您上面计算的损失的影响,以便我们可以执行更新步骤。

然后第一步是计算dL/dz,即损失函数相对于线性函数(y = Wx + b)的导数,它本身就是dL/da * da/dz的组合(即导数损失wrt激活 * deriv 激活 wrt 线性函数)。

您发布的链接是激活函数 wrt 线性函数的导数。这个博客很好地解释了所有部分是如何组合在一起的,虽然他们使用的激活函数是一个 sigmoid,但是组合在一起的整体部分是相同的。


推荐阅读