自定义损失函数 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_true
和y_pred
之间更大的差异,您可以考虑使用mse loss
而不是mae loss
;在 RMSE/MSE 的情况下,由于误差在平均之前是平方的,因此 RMSE 会为较大的误差赋予较高的权重。
问题是你划分为y_test
,因此结果不同。您可以先尝试删除分母以获得相同的 MAPE,如果在 y_test
和 y_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