label_smooth

paddle.nn.functional. label_smooth ( label, prior_dist=None, epsilon=0.1, name=None ) [源代码]

实现了标签平滑的功能。标签平滑是一种对分类器层进行正则化的机制,称为标签平滑正则化(LSR)。由于直接优化正确标签的对数似然可能会导致过拟合,降低模型的适应能力,因此提出了标签平滑的方法来降低模型置信度。

标签平滑使用标签 \(y\) 和一些固定模式随机分布变量 \(\mu\)。对 \(k\) 标签,标签平滑的计算方式如下。

\[\tilde{y_k} = (1 - \epsilon) * y_k + \epsilon * \mu_k,\]

其中 \(1-\epsilon\)\(\epsilon\) 分别是权重,\(\tilde{y_k}\) 是平滑后的标签,通常 \(\mu\) 使用均匀分布。

关于更多标签平滑的细节,查看论文

参数

  • label (Tensor) - 包含标签数据的输入变量,数据类型为:float16、float32、float64。标签数据应使用 one-hot 表示,是维度为 \([N_1, ..., Depth]\) 的多维 Tensor,其中 Depth 为字典大小。

  • prior_dist (Tensor,可选) - 用于平滑标签的先验分布,是维度为 \([1,class\_num]\) 的 2D Tensor。如果未设置,则使用均匀分布。默认值为 None。

  • epsilon (float,可选) - 用于混合原始真实分布和固定分布的权重。默认值为 0.1。

  • name (str,可选) - 具体用法请参见 Name,一般无需设置,默认值为 None。

返回

为平滑后标签的 Tensor

代码示例

import paddle
paddle.disable_static()

x = paddle.to_tensor([[[0, 1, 0],
                    [ 1,  0, 1]]], dtype="float32", stop_gradient=False)

output = paddle.nn.functional.label_smooth(x)
print(output)
# Tensor(shape=[1, 2, 3], dtype=float32, place=Place(gpu:0), stop_gradient=False,
#        [[[0.03333334, 0.93333334, 0.03333334],
#          [0.93333334, 0.03333334, 0.93333334]]])