chainer.functions.hinge(x, t, norm='L1', reduce='mean')[source]

一対多分類タスクのヒンジ損失を計算する。

L=1Nn=1Nk=1K[max(0,1δ{tn=k}xnk)]pL=1N∑n=1N∑k=1K[max(0,1−δ{tn=k}xnk)]p

ただし、 NN はバッチサイズを示し、 KK はクラス数。

δ{condition}={11if condition is trueotherwise,δ{condition}={1if condition is true−1otherwise,

and

p={12if norm=L1if norm=L2.p={1if norm=L12if norm=L2.

ヒンジ損失関数 l(x,δ)l(x,δ) を [max(0,1δx)]p[max(0,1−δx)]pとします。 xx と δδ が同じ符号 (つまりxx が分類の適切なスコアを予測している) かつ |x|1|x|≥1のとき、ヒンジ損失 l(x,δ)=0l(x,δ)=0、逆に、それらが異なる符号の場合、 l(x,δ)l(x,δ)は xxに添って線形に増加します。

 

出力は reduce.オプションに設定された値に依る変数。 'no'の場合、エレメントごとの損失値。 'mean'の場合、損失値の平均をとります。

 

Parameters:
  • x (Variable or numpy.ndarray or cupy.ndarray of numpy.float) – 入力値。 x のshapeは(NN, KK) でなければならない。
  • t (Variable or numpy.ndarray or cupy.ndarray of numpy.int32) –  NN-次元のラベルベクトル。tn{0,1,2,,K1}tn∈{0,1,2,…,K−1}の値を伴う。t のshapeは (NN,)でなければならない。
  • norm (string) – ノルムのタイプを指定する。'L1' か 'L2' を設定可能。 
  • reduce (str) – 削減オプション。此の値は 'mean' か 'no'.でなければならない。 それ以外では、 ValueError が発生する。
Returns:

ヒンジ損失 LLのスカラ配列を保持する変数オブジェクト。 reduce に 'no'が設定されている場合、出力値は入力値のひとつ(したがって両方)と同じshapeの配列を持つ。'mean'の場合、出力変数はスカラ値を持つ。 

Return type:

Variable

 

Example

 

バッチサイズ N は 2 で、クラス数 K は 3の場合。

 

>>> x = np.array([[-2.0, 3.0, 0.5],

... [5.0, 2.0, -0.5]]).astype('f')
>>> x
array([[-2. , 3. , 0.5], [ 5. , 2. , -0.5]], dtype=float32)
>>> t = np.array([1, 0]).astype('i')
>>> t
array([1, 0], dtype=int32)
>>> F.hinge(x, t)
variable(2.5)
>>> F.hinge(x, t, reduce='no')
variable([[ 0. , 0. , 1.5], [ 0. , 3. , 0.5]])
>>> F.hinge(x, t, norm='L2')
variable(5.75)