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