chainer.functions.
hinge
(x, t, norm='L1',
reduce='mean')[source]¶
一対多分類タスクのヒンジ損失を計算する。
L=1N∑n=1N∑k=1K[max(0,1−δ{tn=k}xnk)]pL=1N∑n=1N∑k=1K[max(0,1−δ{tn=k}xnk)]pただし、 NN はバッチサイズを示し、 KK はクラス数。
δ{condition}={1−1if 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: |
|
---|---|
Returns: |
ヒンジ損失 LLのスカラ配列を保持する変数オブジェクト。 |
Return type: |
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)