【问题标题】:Tilted loss in theanotheano中的倾斜损失
【发布时间】:2016-11-24 16:12:58
【问题描述】:

我正在尝试计算倾斜损失,这反过来将在 Keras 中使用。但是,我一定是做错了什么,因为我得到了负损失值(这应该是不可能的)。谁能指出我做错了什么。我假设这是我弄错的 theano 语法。

损失在数学上定义为: 其中 $\xi_i = y_i - f_i$ 其中 $y_i$ 是观察值,$f_i$ 是预测值。此外,我在平均损失之后,因此我将损失函数定义为:

$$
\mathcal{L} = \frac{\alpha\sum \xi_i-\sum I(\xi_i<0)\xi_i}{N}
$$

其中 $I()$ 是指标函数,如果为真,则取值为 1。

因此我的损失函数定义如下:

def tilted_loss2(y,f):
    q = 0.05
    e = (y-f)
    return (q*tt.sum(e)-tt.sum(e[e<0]))/e.shape[0]

但是,当我运行我的网络时,我得到了负值。这里的theano语法有问题吗?我最大的怀疑在这里:tt.sum(e[e&lt;0]))。可以这样切片吗?

任何想法都将不胜感激。

【问题讨论】:

    标签: python theano keras


    【解决方案1】:

    你不能这样切片。 see this answer

    你需要改变你的损失函数如下:

    def tilted_loss2(y,f):
        q = 0.05
        e = (y-f)
        return (q*tt.sum(e)-tt.sum(e[(e<0).nonzero()]))/e.shape[0]
    

    您也可以尝试使用abs 函数而不是可能不起作用的复杂切片语法来解决此问题:

    def tilted_loss2(y,f):
        q = 0.05
        e = (y-f)
        return (q*tt.sum(e)-tt.sum(e-abs(e))/2.)/e.shape[0]
    

    【讨论】:

      猜你喜欢
      • 2019-12-15
      • 1970-01-01
      • 2016-03-11
      • 2016-12-25
      • 2016-12-23
      • 2017-10-28
      • 2023-03-23
      • 2015-07-19
      • 2013-09-16
      相关资源
      最近更新 更多