【发布时间】:2020-08-30 10:13:25
【问题描述】:
根据docs,Reduction 参数有 3 个值 - SUM_OVER_BATCH_SIZE、SUM 和 NONE。
y_true = [[0., 2.], [0., 0.]]
y_pred = [[3., 1.], [2., 5.]]
mae = tf.keras.losses.MeanAbsoluteError(reduction=tf.keras.losses.Reduction.SUM)
mae(y_true, y_pred).numpy()
> 5.5
mae = tf.keras.losses.MeanAbsoluteError()
mae(y_true, y_pred).numpy()
> 2.75
经过各种试验,我可以推断出计算结果是这样的:-
-
当
REDUCTION = SUM,Loss = Sum over all samples {(Sum of differences between y_pred and y_target vector of each sample / No of element in y_target of the sample )} = { (abs(3-0) + abs(1-2))/2 } + { (abs(2-0) + abs(5-0))/2 } = {4/2} + {7/2} = 5.5. -
当
REDUCTION = SUM_OVER_BATCH_SIZE,Loss = [Sum over all samples {(Sum of differences between y_pred and y_target vector of each sample / No of element in y_target of the sample )}] / Batch_size or No of Samples = [ { (abs(3-0)} + abs(1-2))/2 } + { (abs(2-0) + abs(5-0))/2 } ]/2 = [ {4/2} + {7/2} ]/2 = [5.5]/2 = 2.75.
因此,SUM_OVER_BATCH_SIZE 只不过是SUM/batch_size。那么,为什么叫SUM_OVER_BATCH_SIZE,而SUM实际上是把整个batch的loss加起来,而SUM_OVER_BATCH_SIZE计算的是batch的平均loss。
我对@987654337@ 和SUM 工作原理的假设是否正确?
【问题讨论】:
-
你的问题到底是什么?
-
很抱歉没有更清楚。我的问题是,如果我假设“SUM_OVER_BATCH_SIZE”计算的是批次的平均值而不是总和是否正确?因为,查看文档以及 PyTorch L1 损失 (pytorch.org/docs/stable/generated/…),似乎
SUM_OVER_BATCH_SIZE对应于 Torch 中的mean,而SUM对应于sum?
标签: python tensorflow keras tensorflow2.0