2016-05-13 36 views
1

我有兩種函數可以產生相同的結果:f1(x,theta)=f2(x,theta)在theano中使用huber損失的梯度

鑑於輸入x,我需要找到使這個等式保持儘可能好的參數theta

最初我正在考慮使用平方損失和最小化(f1(x,theta)-f2(x,theta))^2並通過SGD解決。

但是我在考慮讓損失更加精確,並使用huber(或絕對損失)的差異。 Huber損失是一個分段函數(即最初它是二次的,然後它變成一個線性函數)。

我該如何在theano中使用我的huber損失的漸變?

回答

1

一個非常簡單的實現在theano HUBER損失的,可以發現here

下面的代碼片段

import theano.tensor as T 
delta = 0.1 
def huber(target, output): 
    d = target - output 
    a = .5 * d**2 
    b = delta * (abs(d) - delta/2.) 
    l = T.switch(abs(d) <= delta, a, b) 
    return l.sum() 

功能huber將返回損失,您可以再插上的符號表示theano.tensor.grad以獲得漸變並使用它來最小化使用SGD