首页 > 解决方案 > tensorflow 非对称损失函数

问题描述

我想实现一个不对称的损失函数,例如参考这里

https://stats.stackexchange.com/questions/37955/how-to-design-and-implement-an-asymmetric-loss-function-for-regression

在 TensorFlow 中。

我目前正在使用均方误差损失函数:

mse = tf.reduce_mean(tf.squared_difference(out,Y))

我想用 mse = tf.reduce_mean(asymetric_squared_difference(out,Y,alpha)) 替换

我查看了 tf.squared_difference 的定义位置,发现https://www.tensorflow.org/api_docs/python/tf/squared_difference 其中说 tensorflow/python/ops/gen_math_ops.py

编辑:经过大量挖掘,从 ops.math_grad 第 999 行到第 1012 行调用 SquaredDifference。但它有很多额外的梯度功能,我不确定如何复制。

我将如何最好地添加此功能?

标签: pythontensorflowloss-function

解决方案


您是想实现自己的,还是只想使用任何非对称函数(应该能够用作损失函数,因为“损失”函数只是用于控制损失的函数的标签)

这里的大多数不对称功能应该是兼容的。

在顶部,你可以使用

tf.zeta(x,q)

代替

tf.squared_difference(x,y)

用非对称损失函数(tf.zeta)替换对称损失函数(tf.squared_difference)。

如果您仍然想实现一个损失函数,那么您必须在两个Tensors 上定义操作(同时还要观察name我遗漏的未列出的函数参数)并返回结果,就像 tf.zeta 所做的那样。

另外,您应该查看“预测失业率......” 满足您需求的论文,正如您在“交叉验证”堆栈交换帖子的链接中突出显示的那样,该帖子向您发送了您的旅程:) 它包含非对称损失函数所需的基本表达式的方程,这是我曾经搜索过的fortf.zeta在 TensorFlow 文档中的“基本数学函数”

但我可能完全错了。我不知道。我不使用 TensorFlow。. 。然而。


推荐阅读