2


私は、 Hoffer and Ailon, Deep Metric Learning Using Triplet Network , ICLR 2015で説明されている Caffe のトリプレット損失のソフトマックス バージョンを実装しようとしています。

私はこれを試しましたが、指数の L2 が二乗されていないため、勾配を計算するのが難しいと感じています。

誰かがここで私を助けてくれますか?

4

2 に答える 2

3

Caffe の既存のレイヤーを使用して L2 基準を実装すると、すべての手間を省くことができます。

||x1-x2||_2これは、「底」のx1andを caffe で計算する 1 つの方法です ( andがblobであるとx2仮定し、次元差分のノルムを計算します)。x1x2BCBC

layer {
  name: "x1-x2"
  type: "Eltwise"
  bottom: "x1"
  bottom: "x1"
  top: "x1-x2"
  eltwise_param { 
    operation: SUM
    coeff: 1 coeff: -1
  }
}
layer {
  name: "sqr_norm"
  type: "Reduction"
  bottom: "x1-x2"
  top: "sqr_norm"
  reduction_param { operation: SUMSQ axis: 1 }
}
layer {
  name: "sqrt"
  type: "Power"
  bottom: "sqr_norm"
  top: "sqrt"
  power_param { power: 0.5 }
}

この論文で定義されているトリプレット損失については、 と の L2 ノルムを計算し、これら 2 つのブロブを連結し、連結ブロブをレイヤーにフィードする必要がx-x+ありx-x-ます"Softmax"
汚れた勾配計算は必要ありません。

于 2016-03-29T12:08:44.830 に答える
2

これは数学の問題ですが、これで終わりです。最初の式は慣れ親しんだもので、2 番目の式は二乗されていないときに行うものです。

ノルムの導出

于 2016-03-29T10:38:56.567 に答える