自定义损失函数 Tensorflow / Keras 惩罚相对距离

Posted

技术标签:

【中文标题】自定义损失函数 Tensorflow / Keras 惩罚相对距离【英文标题】:Custom loss function Tensorflow / Keras penalizing relative distance 【发布时间】:2021-01-14 19:29:20 【问题描述】:

我构建了一个具有三个输出类的张量流神经网络。 我的损失函数目前是val_mean_absolute_percentage_error,因为不是绝对距离,而是目标和预测变量之间的相对距离很重要。 但是,平均绝对百分比误差计算为

1/n sum(|(y_test - y_pred) / y_test|)

不完全适合我的问题,因为如果 y_pred > y_test 会受到更大的惩罚

示例 1:y_test = 5, y_pred = 2 --> Mape = 0.6

示例 2:y_pred = 5, y_test = 2 --> Mape = 1.5

然而,上述例子应该受到同样的惩罚。

有谁知道哪个(自定义)损失函数更适合我的问题?

【问题讨论】:

【参考方案1】:

对于y_truey_pred 之间更大的差异,您可以考虑使用mse loss 而不是mae loss;在 RMSE/MSE 的情况下,由于误差在平均之前是平方的,因此 RMSE 会为较大的误差赋予较高的权重。

问题是你划分为y_test,因此结果不同。您可以先尝试删除分母以获得相同的 MAPE,如果在 y_testy_pred 之间仍然获得更大的值,请考虑使用 RMSE

【讨论】:

这并不能解决问题。我正在寻找一个不依赖于幅度的指标。 y_pred=50 和 y_test=100 的惩罚应该与 y_pred=2 和 y_test=4 相同。 MSE/RMSE 在这里没有帮助 我明白了。然后我认为删除 /y_test 的除法将解决您的问题,因为在这种情况下,只会保持绝对差异:D,因此在您的示例中使用 y_true, y_pred |2-5| == |5-2| 你可以试试 $\sum_i \frac |y_i - \haty_i| |y_i +\haty_i| $

以上是关于自定义损失函数 Tensorflow / Keras 惩罚相对距离的主要内容,如果未能解决你的问题,请参考以下文章

自定义 keras 损失函数二元交叉熵给出不正确的结果

机器学习之路: tensorflow 自定义 损失函数

带有额外输入数据的 tensorflow 自定义损失函数

Keras 中的自定义损失函数 - 遍历 TensorFlow

自定义损失函数 Tensorflow / Keras 惩罚相对距离

TensorFlow2 入门指南 | 15 默认损失函数 & 自定义损失函数