首页 > 其他分享 >详解Smooth_L1_Loss函数的计算方式

详解Smooth_L1_Loss函数的计算方式

时间:2024-01-28 21:08:02浏览次数:35  
标签:Loss 函数 loss torch Smooth L1

详解Smooth L1 Loss函数的计算方式

在深度学习中,Smooth L1 Loss函数是一种用于回归任务的损失函数。它在一定程度上克服了均方误差(MSE)损失函数的局限性,特别适用于处理离群值。

简介

Smooth L1 Loss函数是Huber Loss的一种近似形式。它通过引入平滑因子,使损失函数在离群值附近呈现鲁棒性。相比于MSE损失函数,它在离群值附近不敏感。

计算方式

Smooth L1 Loss函数的计算方式如下所示: 其中,y_hat是预测值,y是目标值。d是真实值与预测值之间的差值。δ是一个平滑系数,用于决定Smooth L1 Loss函数从L1 Loss逐渐平滑过渡到L2 Loss。 计算步骤如下:

  1. 计算差值d = y_hat - y;
  2. 若d小于δ,则损失函数为0.5 * d^2;
  3. 若d大于等于δ,则损失函数为|d| - 0.5 * δ。

使用场景

Smooth L1 Loss函数常用于目标检测、物体姿态估计等回归任务中。由于平滑性和鲁棒性的特点,它对离群值的处理更加稳健。 在目标检测任务中,Bounding Box回归是常见的子任务。Smooth L1 Loss函数的使用可以有效减小大幅度的定位误差,提高模型在目标边界框位置预测上的准确性。

代码示例

以下是一个使用PyTorch实现Smooth L1 Loss函数的代码示例:

pythonCopy code
import torch
import torch.nn as nn
# 定义Smooth L1 Loss函数
smooth_l1_loss = nn.SmoothL1Loss()
# 随机生成真实值和预测值
y_hat = torch.tensor([1.0, 2.0, 3.0])
y = torch.tensor([1.2, 1.8, 2.5])
# 计算Smooth L1 Loss
loss = smooth_l1_loss(y_hat, y)
print(loss)

在上述代码中,首先导入torchtorch.nn模块,并定义了Smooth L1 Loss函数为smooth_l1_loss。然后随机生成了真实值y和预测值y_hat。最后调用smooth_l1_loss函数计算Smooth L1 Loss,并打印结果。


以目标检测任务为例:

pythonCopy code
import torch
import torch.nn as nn
# 定义Smooth L1 Loss函数
smooth_l1_loss = nn.SmoothL1Loss()
# 假设预测的边界框坐标为(左上角x, 左上角y, 右下角x, 右下角y)
y_hat = torch.tensor([1.0, 2.0, 5.0, 6.0])  # 预测边界框
y = torch.tensor([1.2, 1.8, 4.8, 6.5])  # 真实边界框
# 计算Smooth L1 Loss
loss = smooth_l1_loss(y_hat, y)
print(loss)

在上述代码中,我们假设进行目标检测任务,目标是预测输入图像中的物体边界框。假设模型的输出为预测边界框y_hat,真实边界框y是标注的真实值。 通过导入torchtorch.nn模块,我们定义了Smooth L1 Loss函数为smooth_l1_loss。然后,我们创建了预测边界框y_hat和真实边界框y的张量。 最后,我们调用smooth_l1_loss函数计算Smooth L1 Loss,并打印结果。 这个示例代码展示了Smooth L1 Loss在目标检测任务中的应用。通过使用Smooth L1 Loss函数,我们可以度量预测边界框与真实边界框之间的差异,并作为损失函数进行模型的训练。这有助于提高模型的边界框位置预测准确性。


Huber Loss是一种用于回归任务的损失函数,它结合了均方误差(MSE)和绝对值误差(L1 Loss)的优势,旨在兼顾鲁棒性和稳定性。

简介

在机器学习中,回归任务的目标是预测连续值。而损失函数则用于度量预测值与真实值之间的差异,并作为训练模型的指导信号。传统的损失函数如均方误差(MSE)对离群值非常敏感,容易受到噪声的干扰,而绝对值误差(L1 Loss)则对离群值具有鲁棒性,但在梯度计算时不连续。为了兼顾鲁棒性和稳定性,Huber Loss应运而生。

计算方式

Huber Loss的计算方式如下所示:

plaintextCopy code
if |y_hat - y| <= δ:
    loss = 0.5 * (y_hat - y)^2
else:
    loss = δ * |y_hat - y| - 0.5 * δ^2

其中,y_hat是预测值,y是目标值,|y_hat - y|表示预测值与目标值之间的绝对差。δ是一个超参数,用于决定Huber Loss从均方误差(MSE)逐渐过渡到绝对值误差(L1 Loss)。 计算方式可以简单解释为:当预测值与目标值之间的差异小于等于δ时,采用MSE的计算方式;当差异大于δ时,采用L1 Loss的计算方式。

使用场景

Huber Loss常应用于回归问题中,特别是在存在离群值的情况下。由于其平滑的特点,相比于MSE和L1 Loss,Huber Loss可以更好地处理离群值,有助于提高模型的鲁棒性和稳定性。 在实际应用中,Huber Loss可用于许多回归任务,例如房价预测、目标检测中的边界框回归、姿态估计等。

代码示例

以下是一个使用PyTorch实现Huber Loss的代码示例:

pythonCopy code
import torch
import torch.nn as nn
# 定义Huber Loss函数
huber_loss = nn.SmoothL1Loss(delta=1.0)
# 假设预测值为y_hat,目标值为y
y_hat = torch.tensor([1.0, 2.0, 3.0])
y = torch.tensor([0.8, 1.5, 3.5])
# 计算Huber Loss
loss = huber_loss(y_hat, y)
print(loss)

在上述代码中,我们导入了torchtorch.nn模块,并定义了Huber Loss函数为huber_loss。然后,我们创建了预测值y_hat和目标值y的张量。最后,我们调用huber_loss函数计算Huber Loss,并打印结果。

总结

Smooth L1 Loss函数是一种用于回归任务的损失函数,通过引入平滑因子,在离群值附近呈现鲁棒性。它的计算方式简单直观,同时在目标检测和物体姿态估计等任务中有着广泛的应用。通过使用Smooth L1 Loss函数,我们可以有效地处理离群值,提高模型的稳健性和准确性。

标签:Loss,函数,loss,torch,Smooth,L1
From: https://blog.51cto.com/u_15702012/9454156

相关文章

  • MySQL100题知识点
    https://testerhome.com/articles/349721、select*查询带来的不确定性2、SELECTemp_name,salary*12+COALESCE(bonus,0)FROMemployee;COALESCE函数用于将空值转换为03、SELECTemp_name,salary*12+COALESCE(bonus,0)AS"全年收入"FROMemployee;AS为......
  • F1. Smooth Sailing (Easy Version)
    F1.SmoothSailing(EasyVersion)Theonlydifferencebetweenthetwoversionsofthisproblemistheconstrainton$q$.Youcanmakehacksonlyifbothversionsoftheproblemaresolved.Thomasissailingaroundanislandsurroundedbytheocean.Theoc......
  • UL153台灯测试报告 
    携式照明电灯台灯手电筒UL153①⑧〇②⑥⑨①①⑥④③亚马逊对带电类产品的审核很是严格,而此番亚马逊大量发送上述邮件,更多的是为卖家们起到提示作用。“为保证消费者的安全,亚马逊始终强调带电的产品都需要有相关的认证方可进行销售。下面简单介绍一下亚马逊被投诉常见要做UL认证的......
  • asymmetric loss学习笔记
    在看RAM++模型的时候,看到了用的损失函数是asymmetricloss,称为非对称损失。以二分类问题为例,正类别和负类别的损失权重可以不相等。这样设计的目的是使模型更关注于对某一类别的正确分类,尤其是当某一类别的错误分类可能带来更严重后果时。这个损失常常与focalloss一起做对比,"不......
  • CodeForces 1920F2 Smooth Sailing (Hard Version)
    洛谷传送门CF传送门首先需要知道的一个trick:判断一个点是否在一个闭合回路内部,从这个点向任意方向引一条射线,若不考虑相切,那么和回路的交点为奇数时这个点在回路内部,否则在外部。那么这题要判断一个回路是否包含全部的island,可以找到任意一个island向右引一条射线。给每......
  • Microsoft 365 新功能速递:Microsoft 365 Data loss prevention simulation mode
    51CTOBlog地址:https://blog.51cto.com/u_13969817预计2024年2月底,Microsoft365将推出DLP的新功能:Simulationmode ,可以为DLP管理员提供了一种独立的体验,可以尝试DLP策略,评估其影响,并建立对策略有效性的信心,从而最终减少策略执行的时间。Simulationmode 是对现有测试模式行为......
  • 大疆DJI Zenmuse L1点云导入contextcapture(iTwin capture)—轨迹文件Sbet转成符合conte
    大疆DJIZenmuseL1点云导入contextcapture(iTwincapture)—轨迹文件Sbet转成符合contextcapture要求的trajectoriesfile前言步骤1.在DJITerra中导出las格式的点云,然后找到轨迹文件sbet.txt2.将所有的sbet.txt转成需要的文件样式3.把点云导入contextcapture(iTwincapture)前言......
  • OpenEuler22.03安装PostgreSQL15.5并配置一主二从
    环境准备序号IP标识(hostname)CPU/内存配置系统盘数据盘1192.168.8.190pg018C+16G80G500G2192.168.8.191pg028C+16G80G500G3192.168.8.192pg038C+16G80G500G规划的文件夹目录(所有主机):##以下目录为本文规划的目录,可以提前创建,也可以跟着......
  • OpenEuler22.03SP2 LTS安装PostgreSQL15.5并配置一主二从
    环境准备序号IP标识(hostname)CPU/内存配置系统盘数据盘1192.168.8.190pg018C+16G80G500G2192.168.8.191pg028C+16G80G500G3192.168.8.192pg038C+16G80G500G规划的文件夹目录(所有主机):##以下目录为本文规划的目录,可以提前创建,也可以跟着......
  • 新概念3册L14笔记(A noble gangster)
    课文课文理解1)TherewasatimewhentheownersofshopsandbusinessesinChicagohadtopaylargesumsofmoneytogangstersinreturnfor'protection.'2)Ifthemoneywasnotpaidpromptly,thegangsterswouldquicklyputamanoutofbusinessby......