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(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>
这只是为每个标签返回一组损失,它是真实标签与您的模型认为标签应该是什么之间的直接区别。
计算损失(前向传播阶段的一部分)之后的下一步是开始反向传播,即我们要找到每个权重/偏差矩阵对您上面计算的损失的影响,以便我们可以执行更新步骤。
然后第一步是计算dL/dz,即损失函数相对于线性函数(y = Wx + b)的导数,它本身就是dL/da * da/dz的组合(即导数损失wrt激活 * deriv 激活 wrt 线性函数)。
您发布的链接是激活函数 wrt 线性函数的导数。这个博客很好地解释了所有部分是如何组合在一起的,虽然他们使用的激活函数是一个 sigmoid,但是组合在一起的整体部分是相同的。
推荐阅读
- hive - 如何通过选择插入?
- azure - 如何将 Web App 连接到 Storage Account Container 并利用它来提供文件?
- unit-testing - 模拟 android.graphics.Rect
- ruby-on-rails - 有没有办法为入站 ema 手动指定 MIME 标头
- reactjs - ReactI18 在运行时检测 json 翻译的变化
- aws-policies - aws secrets manager 策略的多个条件
- data-modeling - 如何对表进行建模以在 QuestDb 中为同一时间戳保存许多指标?
- html - 伪元素 ::before 和 ::after 的 z-index 问题
- vhdl - 在具有敏感性列表的进程中创建等待语句需要什么
- entity-framework-6 - 我们需要设置哪个标志来确保 EF Plus 的社区版本?