Shortcuts

HuberLoss

class torch.nn.HuberLoss(reduction='mean', delta=1.0)[源代码]

创建一个标准,如果绝对逐元素误差低于delta,则使用平方项,否则使用delta缩放的L1项。这个损失结合了L1LossMSELoss的优点;delta缩放的L1区域使得损失比MSELoss对异常值不那么敏感,而L2区域在L1Loss附近0处提供了平滑性。更多信息请参见Huber损失

对于一批大小为 NN,未减少的损失可以描述为:

(x,y)=L={l1,...,lN}T\ell(x, y) = L = \{l_1, ..., l_N\}^T

ln={0.5(xnyn)2,if xnyn<deltadelta(xnyn0.5delta),otherwise l_n = \begin{cases} 0.5 (x_n - y_n)^2, & \text{if } |x_n - y_n| < delta \\ delta * (|x_n - y_n| - 0.5 * delta), & \text{otherwise } \end{cases}

如果 reduction 不是 none,则:

(x,y)={mean(L),if reduction=‘mean’;sum(L),if reduction=‘sum’.\ell(x, y) = \begin{cases} \operatorname{mean}(L), & \text{if reduction} = \text{`mean';}\\ \operatorname{sum}(L), & \text{if reduction} = \text{`sum'.} \end{cases}

注意

当 delta 设置为 1 时,此损失等同于 SmoothL1Loss。 通常情况下,此损失与 SmoothL1Loss 的差异在于 delta(在 Smooth L1 中称为 beta)的因子。 请参阅 SmoothL1Loss 以获取关于这两种损失行为差异的更多讨论。

Parameters
  • reduction (str, 可选) – 指定应用于输出的reduction方式: 'none' | 'mean' | 'sum''none':不应用reduction, 'mean':输出的总和将除以输出中的元素数量,'sum':输出将被求和。默认值:'mean'

  • delta (float, 可选) – 指定在delta-scaled L1和L2损失之间切换的阈值。 该值必须为正。默认值:1.0

Shape:
  • 输入:()(*) 其中 * 表示任意数量的维度。

  • 目标: ()(*), 与输入形状相同。

  • 输出:标量。如果 reduction'none',那么 ()(*),与输入形状相同。

优云智算