label_smooth

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

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

标签平滑使用标签

label_smooth - 图1

和一些固定模式随机分布变量

label_smooth - 图2

。对

label_smooth - 图3

标签,标签平滑的计算方式如下。

label_smooth - 图4

其中

label_smooth - 图5

和 ϵϵ 分别是权重, yk~yk~ 是平滑后的标签,通常 μμ 使用均匀分布。

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

参数:

  • label (Tensor) - 包含标签数据的输入变量。 标签数据应使用 one-hot 表示,是维度为 [N1,…,Depth][N1,…,Depth] 的多维Tensor,其中Depth为字典大小。

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

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

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

返回:为平滑后标签的 Tensor

代码示例

  1. import paddle
  2. import numpy as np
  3. x_data = np.array([[[0, 1, 0],
  4. [ 1, 0, 1]]]).astype("float32")
  5. print(x_data.shape)
  6. x = paddle.to_tensor(x_data, stop_gradient=False)
  7. output = paddle.nn.functional.label_smooth(x)
  8. print(output)
  9. #[[[0.03333334 0.93333334 0.03333334]
  10. # [0.93333334 0.03333334 0.93333334]]]