我目前正在实现一个自定义损失层,在此过程中,我偶然发现了 Objectives.py 文件 [1] 中均方误差的实现。我知道我对这种损失计算的理解遗漏了一些东西,因为我一直认为平均值是在每个小批量(张量的轴 0)中的每个输出的样本之间单独完成的,但看起来平均值实际上是跨最后一个轴(在单个向量中)完成意味着它是跨输出完成的。我在处理自定义损失层时偶然发现了这一点,因为它需要折扣一些输出的损失,因为特定位置的训练输出是特定值。无论如何,我对均方误差的理解不正确吗?为什么 Keras 会使用最后一个轴,从而将 1xn 输出向量转换为 1x1 输出向量?
Thanks.
[1] https://github.com/fchollet/keras/blob/master/keras/objectives.py#L7 https://github.com/fchollet/keras/blob/master/keras/objectives.py#L7
MSE 损失的相关代码如下:
def mean_squared_error(y_true, y_pred):
return K.mean(K.square(y_pred - y_true), axis=-1)
这里首先将 y_pred 和 y_true 相减,然后将该结果传递给 K.square,它按预期返回其参数的平方,然后将该结果传递给 K.mean,它计算平均值。
所以代码显然正在做它应该做的事情。关于为什么要操作最后一个轴,这与类无关,它只是一个约定。请注意,一般来说,MSE 定义中没有类。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)