【问题标题】:tensorflow Asymmetric loss functiontensorflow 非对称损失函数
【发布时间】:2018-12-20 03:12:23
【问题描述】:

我想实现一个不对称的损失函数,比如这里引用的

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。但它有很多额外的梯度功能,我不知道如何复制。

如何最好地添加此功能?

【问题讨论】:

    标签: python tensorflow loss-function


    【解决方案1】:

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

    这里的大部分功能是不对称的,应该是兼容的。

    在顶部,你可以使用

    tf.zeta(x,q)
    

    代替

    tf.squared_difference(x,y)
    

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

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

    此外,您应该查看符合您需求的"Forecasting unemployment rate. . ." paper,如your link to the "Cross validated" stack exchange post that sent you on your journey 中突出显示的那样:) 它包含非对称损失函数所需的基本表达式的方程,这是我用来搜索的@ TensorFlow 文档中的 987654330@ "Basic Math Functions"

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

    【讨论】:

    • 我很乐意使用任何预先存在的函数,它采用两个向量 X 和 Y 并返回它们的差值的一些乘积,随着 X 和 Y 的距离越来越远而平滑地增加,从而导致更大的当 Y > X 时增加,当 X > Y 时增加相同的量。查看 tf.zeta(x,q) 函数,它似乎没有这样做。也可能是 zeta 对于 Re(x)~=1 是发散的,这可能是一个问题。
    • 知道了。我不知道你有具体的要求,但我建议你只考虑你已经知道的任何数学函数,看看 tf.whatever 是否不存在:) 如果没有,那么你会被卡住实施它。您还必须从github.com/tensorflow/tensorflow/blob/master/tensorflow/core/… 开始定义您的函数,然后找出定义实现部分的位置(我只搜索了“zeta”并找到了这些定义)。
    • 再想一想,听起来 tf.pow(x, y) 会起作用。 . .
    • 我无法让 Pow 考虑两个向量之间的差异。它非常不对称,但我无法将它凝聚起来以对残差进行操作。
    • 怎么样(相对于残差)?带有 pow 的残差实际上需要再次调用 pow 操作数反转,然后在 x^y 和 y^x 之间求差,以便寻找它们如何发散,不是吗?除非我只是想错了。那时它看起来非常像平方差,所以我只是倾向于做一些事情,比如使用 1/y 乘以 x^y 得到的比率。 . . YMMV,我只是在谈论获得不对称损失,它可以按照你想要的任何方式构建。但是,我承认将它与 tf 的 API 匹配起来有点麻烦
    猜你喜欢
    • 2021-12-07
    • 2019-02-03
    • 1970-01-01
    • 2020-10-28
    • 2017-10-10
    • 2018-01-09
    • 2019-01-20
    • 2022-12-09
    • 1970-01-01
    相关资源
    最近更新 更多