SmoothL1Loss

class paddle.nn. SmoothL1Loss ( reduction=’mean’, delta=1.0, name=None ) [源代码]

该OP计算输入input和标签label间的SmoothL1损失,如果逐个元素的绝对误差低于1,则创建使用平方项的条件 ,否则为L1损失。在某些情况下,它可以防止爆炸梯度, 也称为Huber损失,该损失函数的数学计算公式如下:

SmoothL1Loss - 图1

z_i的计算公式如下:

SmoothL1Loss - 图2

参数

  • reduction (string, 可选): - 指定应用于输出结果的计算方式,数据类型为string,可选值有: none, mean, sum 。默认为 mean ,计算 mini-batch loss均值。设置为 sum 时,计算 mini-batch loss的总和。设置为 none 时,则返回loss Tensor。

  • delta (string, 可选): SmoothL1Loss损失的阈值参数,用于控制Huber损失对线性误差或平方误差的侧重。数据类型为float32。 默认值= 1.0。

  • name (string, 可选): - 操作的名称(可选,默认值为None)。更多信息请参见 Name

输入

  • input (Tensor): 输入 Tensor, 数据类型为float32。其形状为 [N,C][N,C] , 其中 C 为类别数。对于多维度的情形下,它的形状为 [N,C,d1,d2,…,dk][N,C,d1,d2,…,dk],k >= 1。

  • label (Tensor): 输入input对应的标签值,数据类型为float32。数据类型和input相同。

返回

Tensor, 计算 SmoothL1Loss 后的损失值。

代码示例

  1. import paddle
  2. import numpy as np
  3. input_data = np.random.rand(3,3).astype("float32")
  4. label_data = np.random.rand(3,3).astype("float32")
  5. input = paddle.to_tensor(input_data)
  6. label = paddle.to_tensor(label_data)
  7. loss = paddle.nn.SmoothL1Loss()
  8. output = loss(input, label)
  9. print(output)