theano 中的倾斜损失

Tilted loss in theano

我正在尝试计算倾斜损失,这又将在 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<0]))。你能这样切吗?

如有任何想法,我们将不胜感激。

你不能这样切片。

您需要按如下方式更改损失函数:

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]