Skip to content

Commit 9f635ff

Browse files
authored
在SmoothL1Loss中加入了is_huber参数 (#7323)
1 parent 3904528 commit 9f635ff

File tree

4 files changed

+25
-6
lines changed

4 files changed

+25
-6
lines changed

docs/api/paddle/nn/SmoothL1Loss_cn.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
SmoothL1Loss
44
-------------------------------
55

6-
.. py:class:: paddle.nn.SmoothL1Loss(reduction='mean', delta=1.0, name=None)
6+
.. py:class:: paddle.nn.SmoothL1Loss(reduction='mean', delta=1.0, is_huber=True, name=None)
77
88
计算输入 :attr:`input` 和标签 :attr:`label` 间的 SmoothL1 损失,如果逐个元素的绝对误差低于 1,则创建使用平方项的条件,否则为 L1 损失。在某些情况下,它可以防止梯度爆炸,也称为 Huber 损失,该损失函数的数学计算公式如下:
99

@@ -24,6 +24,7 @@ SmoothL1Loss
2424

2525
- **reduction** (str,可选) - 指定应用于输出结果的计算方式,可选值有 ``none``、``mean`` 和 ``sum``。默认为 ``mean``,计算 ``mini-batch`` loss 均值。设置为 `sum` 时,计算 `mini-batch` loss 的总和。设置为 ``none`` 时,则返回 loss Tensor。
2626
- **delta** (str,可选) - SmoothL1Loss 损失的阈值参数 :math:`\delta`,用于控制 Huber 损失对线性误差或平方误差的侧重。数据类型为 float32。默认值为 :math:`1.0`。
27+
- **is_huber** (bool,可选) - 如果为 True,则使用 Huber 损失。如果为 False, 则使用 Huber 损失除以 delta 值。默认为 True。
2728
- **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。
2829

2930
输入

docs/api/paddle/nn/functional/smooth_l1_loss_cn.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
smooth_l1_loss
44
-------------------------------
55

6-
.. py:function:: paddle.nn.functional.smooth_l1_loss(input, label, reduction='mean', delta=1.0, name=None)
6+
.. py:function:: paddle.nn.functional.smooth_l1_loss(input, label, reduction='mean', delta=1.0, is_huber=True, name=None)
77
88
计算输入 input 和标签 label 间的 SmoothL1 损失,如果逐个元素的绝对误差低于 1,则创建使用平方项的条件,
99
否则为 L1 损失。在某些情况下,它可以防止梯度爆炸,也称为 Huber 损失,该损失函数的数学计算公式如下:
@@ -27,6 +27,7 @@ smooth_l1_loss
2727
- **label** (Tensor) - 输入 :attr:`input` 对应的标签值,数据类型和 :attr:`input` 相同。
2828
- **reduction** (str,可选) - 指定应用于输出结果的计算方式,数据类型为 string,可选值有 ``none``、``mean``、``sum``。默认为 ``mean``,计算 ``mini-batch`` loss 均值。设置为 ``sum`` 时,计算 ``mini-batch`` loss 的总和。设置为 ``none`` 时,则返回 loss Tensor。
2929
- **delta** (str,可选) - SmoothL1Loss 损失的阈值参数 :math:`\delta`,用于控制 Huber 损失对线性误差或平方误差的侧重。数据类型为 float32。默认值为 1.0。
30+
- **is_huber** (bool,可选) - 如果为 True,则使用 Huber 损失。如果为 False, 则使用 Huber 损失除以 delta 值。默认为 True。
3031
- **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。
3132

3233

docs/guides/model_convert/convert_from_pytorch/api_difference/functional/torch.nn.functional.smooth_l1_loss.md

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ paddle.nn.functional.smooth_l1_loss(input,
1818
label,
1919
reduction='mean',
2020
delta=1.0,
21+
is_huber=True,
2122
name=None)
2223
```
2324

@@ -33,6 +34,7 @@ paddle.nn.functional.smooth_l1_loss(input,
3334
| reduce | - | 已弃用 |
3435
| reduction | reduction | 表示应用于输出结果的规约方式,可选值有:'none', 'mean', 'sum' |
3536
| beta | delta | SmoothL1Loss 损失的阈值参数 |
37+
| - | is_huber | 控制 huber_loss 与 smooth_l1_loss 的开关,Paddle 需设置为 False 。 |
3638

3739
Torch 中 Smooth L1 loss 的计算方式:
3840

@@ -64,7 +66,8 @@ z_i = \begin{cases}
6466
\end{cases}
6567
$$
6668

67-
所以如果 PyTorch 函数参数 $beta$ 与 Paddle 中的参数 $delta$ 取值相同,则 Paddle 的 loss 要再除以 $delta$ 值才能与 Torch 中的结果对齐。
69+
当 $is\_huber$ 参数为 True 时,Paddle 为 huber 损失。
70+
当 $is\_huber$ 参数为 False 时,PyTorch 和 Paddle 计算过程一致,均为 huber 损失除以 $delta$ 值。
6871

6972

7073
### 转写示例
@@ -89,11 +92,11 @@ else:
8992
#### beta
9093
```python
9194
# PyTorch 的 beta 参数转化为 delta 参数
92-
a=0.8
95+
beta=0.8
9396

9497
# PyTorch 写法
95-
output = torch.nn.functional.smooth_l1_loss(input, label, beta=a)
98+
output = torch.nn.functional.smooth_l1_loss(input, label, beta=beta)
9699

97100
# Paddle 写法
98-
output = paddle.nn.functional.smooth_l1_loss(input, label, delta=a) / a
101+
output = paddle.nn.functional.smooth_l1_loss(input, label, delta=beta, is_huber=False)
99102
```

docs/guides/model_convert/convert_from_pytorch/api_difference/nn/torch.nn.SmoothL1Loss.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ torch.nn.SmoothL1Loss(size_average=None,
1313
```python
1414
paddle.nn.SmoothL1Loss(reduction='mean',
1515
delta=1.0,
16+
is_huber=True,
1617
name=None)
1718
```
1819

@@ -25,6 +26,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下:
2526
| reduce | - | PyTorch 已弃用, Paddle 无此参数,需要转写。 |
2627
| reduction | reduction | 表示应用于输出结果的计算方式。 |
2728
| beta | delta | SmoothL1Loss 损失的阈值参数,beta 不为 1.0 时 Paddle 不支持,暂无转写方式。 |
29+
| - | is_huber | 控制 huber_loss 与 smooth_l1_loss 的开关,Paddle 需设置为 False 。 |
2830

2931
### 转写示例
3032
#### size_average
@@ -101,3 +103,15 @@ torch.nn.SmoothL1Loss(reduction='sum')
101103
# Paddle 写法
102104
paddle.nn.SmoothL1Loss(reduction='sum')
103105
```
106+
107+
#### beta
108+
```python
109+
# PyTorch 的 beta 参数转化为 delta 参数
110+
beta=0.8
111+
112+
# PyTorch 写法
113+
torch.nn.SmoothL1Loss(beta=beta)
114+
115+
# Paddle 写法
116+
paddle.nn.SmoothL1Loss(delta=beta, is_huber=False)
117+
```

0 commit comments

Comments
 (0)