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

关于tf.keras.losses中Reduction参数SUM与SUM_OVER_BATCH_SIZE的疑问

Keras MeanAbsoluteError: Reduction 参数计算逻辑与命名疑问解答

首先要明确:你的推导完全正确! 我们先结合你的例子再梳理一遍,然后解答命名的疑问。

一、验证你的计算逻辑

给定输入:

y_true = [[0., 2.], [0., 0.]]
y_pred = [[3., 1.], [2., 5.]]

1. Reduction.SUM 场景

计算逻辑是每个样本的MAE值直接求和:

  • 第一个样本的MAE:(abs(3-0) + abs(1-2)) / 2 = 4/2 = 2
  • 第二个样本的MAE:(abs(2-0) + abs(5-0)) / 2 =7/2=3.5
  • 最终损失:2 + 3.5 = 5.5,和你得到的结果完全一致。

2. 默认的 Reduction.SUM_OVER_BATCH_SIZE 场景

计算逻辑是所有样本MAE的总和除以批量大小(样本数量):

  • 用SUM场景的总和5.5除以样本数2,得到5.5/2=2.75,和你推导的结果匹配。

二、为什么命名为 SUM_OVER_BATCH_SIZE?

这个命名确实容易让人困惑,它的本质就是批量样本的平均损失,命名的逻辑来自它的计算步骤:

  1. 先对批量内所有样本的损失值做**求和(SUM)**操作
  2. 再将这个总和除以批量大小(OVER_BATCH_SIZE)

之所以不直接叫MEAN,是因为在Keras的设计逻辑里,损失的平均有两种维度:一种是按样本数量平均(就是SUM_OVER_BATCH_SIZE),另一种是按所有元素总数平均。而MeanAbsoluteError本身是先计算每个样本的元素平均误差,再进行批量维度的处理,所以用SUM_OVER_BATCH_SIZE来明确它是“先求和样本损失,再除以样本数”的平均方式。

简单来说,这个命名是在描述它的计算过程,而不是直接描述结果(平均损失),这才导致了你的疑问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 00:12:54