【损失函数】SmoothL1Loss 平滑L1损失函数

2023-12-28 16:57:07

1、介绍

torch.nn.SmoothL1Loss?是 PyTorch 中的一个损失函数,通常用于回归问题。它是 L1 损失和 L2 损失的结合,旨在减少对异常值的敏感性。

loss_function = nn.SmoothL1Loss(reduction='mean', beta=1.0)

2、参数

  1. size_average (已弃用): 以前用于确定是否应该对损失的每个元素取平均。如果设置为?False,则对损失进行求和。现在此选项已被弃用,应使用?reduction?参数代替。

  2. reduce (已弃用): 这也是一个旧参数,用于指定是否应用缩减。现在也被?reduction?参数替代。

  3. reduction: 指定应用于输出的缩减方法。可选值为:

    • 'none': 不应用缩减。
    • 'mean': 计算损失的平均值。
    • 'sum': 计算损失的总和。
  4. beta: 用于确定平滑的转换点。对于错误小于?beta?的情况,损失函数变为 L2 损失,对于大于?beta?的情况,变为 L1 损失。

3、图像

????????在 Smooth L1 损失函数的图像中,当预测值与真实值之间的差异较小时(小于?beta,在这里默认为 1.0),它的计算方式类似于 L2 损失(平方误差)。当差异较大时,它的计算方式类似于 L1 损失(绝对误差)。这种混合特性使得 Smooth L1 损失对异常值不那么敏感,同时在优化中更稳定。 ??

4、实例

假设我们有以下情况:我们正在训练一个模型来预测某些连续值,例如房价。我们有以下目标值(真实值)和预测值:

  • 目标(真实值):?[1.5, 2.0, 3.0]
  • 预测:?[1.4, 2.1, 2.9]

我们使用?SmoothL1Loss?作为损失函数:

import torch
import torch.nn as nn

# 定义目标和预测值
targets = torch.tensor([1.5, 2.0, 3.0])
predictions = torch.tensor([1.4, 2.1, 2.9])

# 创建 SmoothL1Loss 实例
loss_function = nn.SmoothL1Loss(reduction='mean', beta=1.0)

# 计算损失
loss = loss_function(predictions, targets)
print(loss)

????????在这个例子中,损失函数将计算目标和预测之间的 Smooth L1 损失,并返回其平均值。如果预测和目标之间的差异小于?beta(在这种情况下为 1.0),则它会应用 L2 损失的平方形式;如果差异大于?beta,则应用 L1 损失的绝对值形式。这种混合使得 Smooth L1 损失对异常值不那么敏感,特别是当预测值与真实值差异很大时。

5、参考

【pytorch】nn.SmoothL1Loss 函数使用_nn.smoothl1loss()-CSDN博客

PyTorch学习笔记:nn.SmoothL1Loss——平滑L1损失_nn.smoothl1loss()-CSDN博客

文章来源:https://blog.csdn.net/Next_SummerAgain/article/details/135257730
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。