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]
我正在尝试计算倾斜损失,这又将在 Keras 中使用。但是,我一定是做错了什么,因为我得到的是负损失值(这应该是不可能的)。谁能指出我做错了什么。我假设这是我弄错的 theano 语法。
损失在数学上定义为:
$$
\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]