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

TensorFlow Keras中add_loss与compile指定的loss如何结合计算梯度?

TensorFlow Keras 总损失计算规则

两类损失的合并逻辑

Keras 默认会直接将两类损失相加得到最终用于梯度更新的总损失,不需要手动合并:

  • 第一类是compile方法中loss参数指定的损失(示例中的重建损失r_loss)
  • 第二类是所有通过add_loss方法在模型内部添加的损失项(示例中的KL散度损失kl_loss)

示例日志的数值对应关系

你给出的训练日志数值完全符合这个规则:

1272/1272 [==============================] - 249s 191ms/step - batch: 635.5000 - size: 1.0000 - loss: 5300.4540 - r_loss: 2856.8228

计算方式为:
总loss = r_loss + kl_loss
代入数值可以算出本轮训练的平均KL损失约为 5300.4540 - 2856.8228 = 2443.6312。

额外说明

  1. 你代码中r_loss是对单样本的空间维度求和,Keras编译时默认会对batch维度取平均,而你add_loss添加的kl_loss本身已经用tf.math.reduce_mean做了batch维度的平均,两者量纲一致,所以可以直接相加。
  2. 如果编译时指定了loss_weights参数,会先对compile传入的损失乘对应权重,再和add_loss的损失相加,你没有配置这个参数所以不需要考虑加权逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:36:03