2016-05-13 5 views
1

私は等しい結果をもたらすと思われる2つの関数:f1(x,theta)=f2(x,theta)を持っています。theanoのげっ歯類喪失の勾配を取る

与えられた入力xは、可能な限り同様にこの等価保持を行うパラメータthetaを見つける必要があります。

最初は、二乗損失を使用して(f1(x,theta)-f2(x,theta))^2を最小化し、SGDで解決することを考えていました。

しかし、私は損失をより正確にして差異の塊茎(または絶対的な損失)を使用することを考えていました。 ヒューバー損失は区分的な関数です(つまり、最初は二次関数であり、それが一次関数に変わります)。

どのように私はtheanoで私の塊茎損失の勾配を取ることができますか? theanoでHuber損失の

答えて

1

かなり単純な実装は、ここで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の使用を最小限に抑えるために使用します。

関連する問題