2017-02-02 10 views
2

私はCaffeの損失層で後方機能について質問します。 私がユークリッド損失層の実装を見ている:最後に https://github.com/BVLC/caffe/blob/master/examples/pycaffe/layers/pyloss.pyカフェ損失層 - 後方機能

後方関数は次のように定義される:

def backward(self, top, propagate_down, bottom): 
    for i in range(2): 
     if not propagate_down[i]: 
      continue 
     if i == 0: 
      sign = 1 
     else: 
      sign = -1 
     bottom[i].diff[...] = sign * self.diff/bottom[i].num 

私は底[0]が示すことを知っています予測値とbottom [1]は目標値(グラウンドトゥルース)です。
符号が予測の場合+1、ターゲットの場合-1である理由を理解できますか? 私は、ターゲットに対してbottom [1] .diffに値を割り当てる必要はないと考えました。

複数ラベルに問題がある場合、どのようにコードを更新できますか?

答えて

1

bottom[1]が真実である場合、propagate_down[1]Falseとなるはずです。したがって、勾配はラベルに伝播しません。
しかし、この損失レイヤーを使用して2つの訓練可能なブロブを比較すると、グラジエントを両方ともbottomに伝搬したいとします。

この兆候は、この特定の損失の派生物に起因するものであり、その派生物を書いてください。

私がここで紛失していることの1つはtop[0].diffです。私が正しく理解すれば、このレイヤーのためにloss_weightが定義されているはずです...

関連する問題