2016-07-21 9 views
0

私は傾斜損失を計算しようとしていますが、これはKerasで使用されます。しかし、私は負の損失値を得ているので、何か間違ったことをしているに違いありません(不可能でなければなりません)。私が間違っていたことを誰でも指摘することはできますか?私はそれが私が間違っているtheanoの構文だと仮定しています。theanoの傾斜損失

損失は数学的に次のように定義されます enter image description here どこ$ \ xi_i = Y_I - $ Y_I $が観察され、$のf_i $が予測されたf_iの$。 $ I()$は、インジケータ関数であり、真の場合の値に1をとる

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

:さらに私は、このように私は私のよう損失関数を定義した、平均損失の後にしています。

次のようしたがって私の損失関数が定義されている:

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]))。このようにスライスできますか?

どのような考えにも感謝します。

答えて

2

このようにスライスすることはできません。

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] 
あなたは次のようにあなたの損失関数を変更する必要が see this answer

関連する問題