multi_label_margin_loss
计算输入 input 和 label 间的多类别多分类问题的 hinge loss 损失。
损失函数计算每一个 mini-batch 的 loss 按照下列公式计算
其中 \(C\) 是类别数量, \(\text{valid_labels}\) 包含样本 \(i\) 所有非负的标签索引(遇到第一个 -1 时停止),\(k\) 遍历除了 \(\text{valid_labels}\) 之外的所有类别索引。
该损失函数只考虑前面的非负标签值,允许不同样本具有不同数量的目标类别。
参数
input (Tensor) - \([N, C]\),其中 N 是 batch_size, C 是类别数量。数据类型是 float32、float64。
label (Tensor) - \([N, C]\),与 input 形状相同。标签
label
的数据类型为 int32、int64。标签值应该是类别索引(非负值)和 -1 值。-1 值会被忽略并停止处理每个样本。reduction (str,可选) - 指定应用于输出结果的计算方式,可选值有:
'none'
,'mean'
,'sum'
。默认为'mean'
,计算 Loss 的均值;设置为'sum'
时,计算 Loss 的总和;设置为'none'
时,则返回原始 Loss。name (str,可选) - 具体用法请参见 api_guide_Name,一般无需设置,默认值为 None。
形状
input (Tensor) - \([N, C]\),其中 N 是 batch_size,C 是类别数量。数据类型是 float32、float64。
label (Tensor) - \([N, C]\),与 input 形状相同,标签
label
的数据类型为 int32、int64。output (Tensor) - 输出的 Tensor。如果
reduction
是'none'
,则输出的维度为 \([N]\),与 batch_size 相同。如果reduction
是'mean'
或'sum'
,则输出的维度为 \([]\) 。
返回
返回计算的 Loss。
代码示例
>>> import paddle
>>> import paddle.nn.functional as F
>>> input = paddle.to_tensor([[0.1, 0.2, 0.4, 0.8], [0.2, 0.5, 0.3, 0.1]], dtype='float32')
>>> label = paddle.to_tensor([[3, 0, -1, -1], [0, 2, -1, -1]], dtype='int64')
>>> loss = F.multi_label_margin_loss(input, label, reduction='mean')
>>> print(loss)
Tensor(shape=[], dtype=float32, place=Place(cpu), stop_gradient=True,
0.94999999)