Python Keras分类交叉熵

Python Keras分类交叉熵,python,keras,Python,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(epsilo

我正试着把我的脑袋绕到分类交叉熵损失上。查看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的位置 是经过计算的。 看见
我遗漏了什么?

我想你可能混淆了两个不同的概念/事件

分类交叉熵损失是模型误差的一种度量,通过以下公式计算:

def categorical_crossentropy(target, output, from_logits=False, axis=-1):
     <etc>
def categorical\u crossentropy(目标、输出、from\u logits=False、axis=-1):
这只是为每个标签返回一个损失数组,它是真实标签和模型认为标签应该是什么之间的直接区别

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

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


链接是激活函数相对于线性函数的导数。很好地解释了所有零件是如何装配在一起的,尽管它们使用的激活函数是一个S形函数,但装配在一起的整体零件是相同的。

此代码计算损耗,而不是损耗的梯度。梯度是使用自动微分计算的。@Dr.Snoopy,这样我就可以知道在哪里以及如何计算梯度了。谢谢你的帮助!因此,据我所知,如果我将交叉熵代码放入一个函数中,并将其提供给我的模型
model.compile(loss=CustomCrossEntropy,optimizer=“adam”,metrics=[“accurity”])
,TensorFlow的自动微分将为我计算导数?是的!但是,如果只使用分类交叉熵,则甚至不需要创建自定义损失函数。你可以使用
loss='classifical\u crossentropy'
Perfect!分类交叉熵只是我的出发点,我想定制它。再次感谢。