chainer.functions.contrastive(x0, x1, y, margin=1, reduce='mean')[source]

 Contrastive lossを計算する。

 

入力として、サンプルとラベルのペアをとります。このラベルはこれらのサンプルが 同類である場合\(1\) 、類似していない場合 \(0\) となります。

 

 \(N\) はミニバッチサイズ 、\(K\) は入力値の次元を示します。入力値x0x1 のshapeは両方とも (N, K)です。

\(n\)番目のサンプルペア \(L_n\) のロス値は

\[L_n = \frac{1}{2} \left( y_n d_n^2 + (1 - y_n) \max ({\rm margin} - d_n, 0)^2 \right)\]

ただし \(d_n = \| {\bf x_0}_n - {\bf x_1}_n \|_2\), \({\bf x_0}_n\) and \({\bf x_1}_n\) 

x0x1\(n\)-番目のK-次元ベクトルです。

 

出力変数の値はreduce オプションの値に依存します。 'no'が設定されている場合、要素ごとのロス値を保持します。 'mean'が設定されている場合、この関数はロス値の平均をとります。

 

Parameters:
  • x0 (Variable) – 最初の入力値。shapeは (N, K)、ただし Nはミニバッチサイズを表し、  K は x0の次元を表している。
  • x1 (Variable) –2番目の入力値。shape は x0と同様。
  • y (Variable) – ラベル。値は 0 か 1。shape は (N,) 、ただし N はミニバッチサイズを表す。
  • margin (float) – contrastive lossのパラメータ。正の値でなければならない。
  • reduce (str) – 削減オプション。この値は'mean''no'.のいずれかでなければならない。それ以外では、 ValueError が発生する。
Returns:

上記の等式で計算されたロス値を保持するVariable。 reduce'no',が設定されている場合、shapeが一方の(ゆえに両方の)入力値と同じであるような配列を保持する。'mean' が設定されている場合、出力値はスカラ値を保持する。

Return type:

Variable

Note

このコストはsiamese networksの訓練に使用することが可能です。詳細は.  Learning a Similarity Metric Discriminatively, with Application to Face Verification をお読みください。