PyTorch中Huber Loss两种计算方式结果不一致的原因排查
问题原因分析
核心差异在于两种计算方式采用了不同的均值加权逻辑,并非舍入误差或操作失误:
- 第一种方式:将所有
y≠0的47个元素合并后计算Huber Loss,最终结果是所有有效元素的整体平均Loss(即总Loss和除以47)。 - 第二种方式:按列提取有效元素,先计算每列的平均Loss,再将三个列的平均Loss取算术平均(即各列平均Loss相加后除以3)。
- 第一种方式:将所有
举个直观例子就能理解:假设三列有效元素数分别为15、16、16(总和47),各列的Huber Loss总和为S1、S2、S3。
- 第一种结果计算公式:
(S1+S2+S3)/47 - 第二种结果计算公式:
(S1/15 + S2/16 + S3/16)/3
这两个公式的计算结果必然不同,除非每列的平均Loss完全一致且各列有效元素数量相等——显然你的数据不满足这个条件。
- 第一种结果计算公式:
浮点数舍入误差的量级通常在
1e-6左右,你得到的差值0.24远大于这个范围,因此可以排除舍入误差的可能。
内容的提问来源于stack exchange,提问作者Henrique Krever
相关产品推荐
相关产品推荐

