精华内容
下载资源
问答
  • SmoothL1 loss

    千次阅读 2019-05-22 17:34:49
    实现代码如下: ...def smooth_l1_loss(input, target, sigma, reduce=True, normalizer=1.0): beta = 1. / (sigma ** 2) diff = torch.abs(input - target) cond = diff < beta loss = torch.where(c...

     

    实现代码如下:

    def smooth_l1_loss(input, target, sigma, reduce=True, normalizer=1.0):
        beta = 1. / (sigma ** 2)
        diff = torch.abs(input - target)
        cond = diff < beta
        loss = torch.where(cond, 0.5 * diff ** 2 / beta, diff - 0.5 * beta)
        if reduce:
            return torch.sum(loss) / normalizer
        return torch.sum(loss, dim=1) / normalizer

     

    展开全文
  • pytorch之SmoothL1Loss原理与用法

    千次阅读 2021-12-06 09:43:19
    我们直接看那个loss计算公式lnl_nln​,可以发现,是一个分段函数,我们将绝对值差视为一个变量zzz,那么这个变量是大于0的,即分段函数只在大于等于0处有定义,有图像。我们再来看看分段点,就是beta。 有意思的是,...

    官方说明:

    在这里插入图片描述

    解读

    我们直接看那个loss计算公式 l n l_n ln,可以发现,是一个分段函数,我们将绝对值差视为一个变量 z z z,那么这个变量是大于0的,即分段函数只在大于等于0处有定义,有图像。我们再来看看分段点,就是beta。

    有意思的是,在分段函数和这个分段点有关,在第一个公式(左边分段函数)中,函数值小于等于 0.5 z 0.5z 0.5z,因为除了beta。右边分段函数中,大于等于 0.5 z 0.5z 0.5z。所以是连续的,所以叫做Smooth。

    而且beta固定下来的时候,当 z z z很大时,损失是线性函数,也就是说损失不会像MSE那样平方倍的爆炸。

    总结就是:前半段随着 z z z的增长,损失增长得非常缓慢,后面快了一点点,但是也仍然是线性的。

    图像

    plt.figure(figsize=(20,8),dpi=80)
    beta=[0.5,1,2,3]
    for i in range(len(beta)):
        
        x1=np.linspace(0,beta[i],21)
        y1=0.5*x1*x1/beta[i]
        x2=np.linspace(beta[i],6,21)
        y2=x2-0.5*beta[i]
        plt.plot(np.hstack([x1,x2]),np.hstack([y1,y2]),label="beta:{}".format(beta[i]))
        
    plt.xlabel("the absolute element-wise error")
    plt.ylabel("the real loss")
    plt.legend()
    

    在这里插入图片描述

    用法

    import torch
    import torch.nn as nn
    a=[1,2,3]
    b=[3,1,9]
    loss_fn=nn.SmoothL1Loss()
    loss_fn(torch.tensor(a,dtype=torch.float32),torch.tensor(b,dtype=torch.float32))
    

    在这里插入图片描述

    展开全文
  • L1Loss也就是L1 Loss了,它有几个别称:L1 范数损失最小绝对值偏差(LAD)最小绝对值误差(LAE)最常看到的MAE也是指L1 Loss损失函数。 它是把目标值 与模型输出(估计值) 做绝对值得到的误差。什么时候使用?回归任务...

    L1Loss

    也就是L1 Loss了,它有几个别称:L1 范数损失

    最小绝对值偏差(LAD)

    最小绝对值误差(LAE)

    最常看到的MAE也是指L1 Loss损失函数。 它是把目标值

    与模型输出(估计值)

    做绝对值得到的误差。

    什么时候使用?回归任务

    简单的模型

    由于神经网络通常是解决复杂问题,所以很少使用。

    L2Loss

    也就是L2 Loss了,它有几个别称:L2 范数损失

    最小均方值偏差(LSD)

    最小均方值误差(LSE)

    最常看到的MSE也是指L2 Loss损失函数,PyTorch中也将其命名为torch.nn.MSELoss

    它是把目标值

    与模型输出(估计值)

    做差然后平方得到的误差

    什么时候使用?回归任务

    数值特征不大

    问题维度不高

    SmoothL1Loss

    简单来说就是平滑版的L1 Loss。

    原理

    SoothL1Loss的函数如下:

    仔细观察可以看到,当预测值和ground truth差别较小的时候(绝对值差小于1),其实使用的是L2 Loss;而当差别大的时候,是L1 Loss的平移。SooothL1Loss其实是L2Loss和L1Loss的结合,它同时拥有L2 Loss和L1 Loss的部分优点。

    1. 当预测值和ground truth差别较小的时候(绝对值差小于1),梯度不至于太大。(损失函数相较L1 Loss比较圆滑)

    2. 当差别大的时候,梯度值足够小(较稳定,不容易梯度爆炸)。

    什么时候使用?回归

    当特征中有较大的数值

    适合大多数问题

    size_average=True or False

    在pytorch中,所有的损失函数都带这个参数,默认设置为True。

    当size_average为True的时候,计算出来的结果会对mini-batch取平均。反之,为False的时候,那算出来的绝对值不会除以n。

    展开全文
  • 参考链接: torch.nn.functional.smooth_...参考链接: torch.nn.SmoothL1Loss(size_average=None, reduce=None, reduction=‘mean’) 参考链接: Microsoft Windows [版本 10.0.18363.1256] (c) 2019 Microsoft Corpor

    参考链接: torch.nn.functional.smooth_l1_loss(input, target, size_average=None, reduce=None, reduction=‘mean’)
    参考链接: torch.nn.SmoothL1Loss(size_average=None, reduce=None, reduction=‘mean’)

    在这里插入图片描述
    在这里插入图片描述

    参考链接:

    Microsoft Windows [版本 10.0.18363.1256]
    (c) 2019 Microsoft Corporation。保留所有权利。
    
    C:\Users\chenxuqi>conda activate ssd4pytorch1_2_0
    
    (ssd4pytorch1_2_0) C:\Users\chenxuqi>python
    Python 3.7.7 (default, May  6 2020, 11:45:54) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import torch
    >>> import torch.nn.functional as F
    >>> input = torch.zeros(2,3)
    >>> input
    tensor([[0., 0., 0.],
            [0., 0., 0.]])
    >>> target = torch.tensor([[0.5,1.2,0.8],[0.4,1.5,2.2]])
    >>> target
    tensor([[0.5000, 1.2000, 0.8000],
            [0.4000, 1.5000, 2.2000]])
    >>>
    >>> F.smooth_l1_loss(target, input, size_average=False)
    D:\Anaconda3\envs\ssd4pytorch1_2_0\lib\site-packages\torch\nn\_reduction.py:43: UserWarning: size_average and reduce args will be deprecated, please use reduction='sum' instead.
      warnings.warn(warning.format(ret))
    tensor(3.9250)
    >>> F.smooth_l1_loss(target, input, size_average=True)
    D:\Anaconda3\envs\ssd4pytorch1_2_0\lib\site-packages\torch\nn\_reduction.py:43: UserWarning: size_average and reduce args will be deprecated, please use reduction='mean' instead.
      warnings.warn(warning.format(ret))
    tensor(0.6542)
    >>> 3.9250/6.0
    0.6541666666666667
    >>>
    >>>
    >>>
    >>> F.smooth_l1_loss(target, input, reduction = 'sum')
    tensor(3.9250)
    >>>
    >>> F.smooth_l1_loss(target, input, reduction='mean')
    tensor(0.6542)
    >>>
    >>> F.smooth_l1_loss(target, input, reduction='none')
    tensor([[0.1250, 0.7000, 0.3200],
            [0.0800, 1.0000, 1.7000]])
    >>>
    >>> input
    tensor([[0., 0., 0.],
            [0., 0., 0.]])
    >>> target
    tensor([[0.5000, 1.2000, 0.8000],
            [0.4000, 1.5000, 2.2000]])
    >>>
    >>>
    >>>
    
    展开全文
  • Pytorch loss: SmoothL1Loss

    千次阅读 2019-05-09 15:11:14
    Huber loss也就是通常所说的SmoothL1 loss: SmoothL1对于异常点的敏感性不如MSE,而且,在某些情况下防止了梯度爆炸。在Pytorch中实现的SmoothL1损失是torch.nn.SmoothL1Loss, x和y可以是任何包含n个元素的Tensor,...
  • torch SmoothL1Loss

    千次阅读 2019-06-12 10:08:52
    import torch bce_loss = torch.nn.BCELoss() ...crit = torch.nn.SmoothL1Loss() pre = torch.Tensor([0.5, 1.6, 1]) target = torch.Tensor([0.5, 0.8, 1]) print(pre.size()) print(target.size()) print(...
  • SSD网络解析之SmoothL1LossLayer层

    千次阅读 2018-08-23 11:11:38
    SSD网络中的SmoothL1LossLayer层借鉴于Fast R-CNN,用于计算smooth L1损失,其中的光滑L1函数如下:   其导函数为:  ...
  • 目标检测:损失函数之SmoothL1Loss

    万次阅读 2018-02-04 12:40:11
    fasterRCNN中的RPN的回归框的loss计算方法 再次深入的解读SmoothL1Loss损失函数: fasterRCNN中SmoothL1Loss的详解  
  • smoothL1 loss的tensorflow实现

    千次阅读 2018-04-13 10:31:14
    def smooth_l1_loss(bbox_pred, bbox_targets, bbox_inside_weights, bbox_outside_weights, sigma=1.0, dim=[1]): ''' bbox_pred :预测框 bbox_targets:标签框 bbox_inside_weights: bbox_outside_...
  • def _smooth_l1_loss(x, t, in_weight, sigma): #sigma=1 sigma2 = sigma ** 2 diff = in_weight * (x - t) abs_diff = diff.abs() flag = (abs_diff.data < (1. / sigma2)).float() y = (flag * (sigm
  • 多任务损失(来自Fast R-CNN) multi-task数据...① clsscore层:用于分类,输出k+1维数组p,表示属于k类和背景的概率。对每个RoI(Region of Interesting)输出离散型概率分布通常,p由k+1类的全连接层利用softmax...
  • A Loss Function for Learning Region Proposals &nbsp; &nbsp; 训练RPN时,只对两种anchor给予正标签:和gt_box有着最高的IoU &amp;&amp; IoU超过0.7。如果对于 所有的gt_box,其IoU都小于0.3,则...
  • SmoothL1Loss

    2018-12-10 15:06:37
  • void SmoothL1LossLayer<Dtype>::Forward_gpu(const vector*>& bottom, const vector*>& top) { int count = bottom[0]->count(); caffe_gpu_sub( count, bottom[0]->gpu_data(), bottom[1]->gpu_data(), ...
  • 文章目录nn.L1Lossnn.SmoothL1Lossnn.MSELossnn.CrossEntropyLossnn.NLLLoss 损失函数,是编译一个神经网络模型必须的两个参数之一,另一个是优化器。损失函数是指用于计算标签值和预测值之间差异的函数,常见的有...
  • 损失函数,是编译一个神经网络模型必须的两个参数之一,另一个是优化器。损失函数是指用于计算标签值和预测值之间差异的...L1Loss 计算方法比较简单,原理就是取预测值和真实值的绝对误差的平均数。计算公式如下 ...
  • RPN网络的smoothL1 loss

    2018-10-11 11:01:58
    RPN网络以及fast rcnn网络的一个bounding-box regression损失函数smoothL1 loss,如下: TensorFlow实现:  def smooth_l1_loss(bbox_pred, bbox_targets, bbox_inside_weights, bbox_outside_weights, sigma=...
  • loss=1N∑n=1Nlnloss=\frac{1}{N} \sum_{n=1}^{N} l_{n}loss=N1​∑n=1N​ln​ 其中,ln=∣xn−yn∣l_{n}=\left|x_{n}-y_{n}\right|ln​=∣xn​−yn​∣ class L1Loss(_Loss): __constants__ = ['redu
  • A Loss Function for Learning Region Proposals训练RPN时,只对两种anchor给予正标签:和gt_box有着最高的IoU && IoU超过0.7。如果对于所有的gt_box,其IoU都小于0.3,则标记为负。损失函数定义如下:其中i...
  • R-CNN利用Bounding Box 回归得到最后的检测框,提高了检测的精度。 Fast R-CNN 使用SmoothL1 Loss取代了Bounding Box 回归。
  • MAE=1n∑i=1n∣f(xi)−yi∣MAE=\frac{1}{n}\sum_{i=1}^n|f(x_i)-y_i|MAE=n1​i=1∑n​∣f(xi​)−yi​∣ 优点 无论对于什么样的输入值,都有着稳定的梯度,不会导致梯度爆炸问题,具有较为稳健性的解。 对于离群点...
  • 本人在进行单目深度估计实验时,使用Huber作为损失函数,也就是通常所说SmoothL1损失: SmoothL1(x,y)={0.5(xi−yi)2if ∣xi−yi∣&lt;1 ∣xi−yi∣−0.5otherwise Smooth_{L1}(x,y) = \begin{...
  • 最后观察 (6), smoothL1 在 x 较小时,对 x 的梯度也会变小,而在 x 很大时,对 x 的梯度的绝对值达到上限 1,也不会太大以至于破坏网络参数。 smoothL1 完美地避开了 L1 和 L2 损失的缺陷。其函数图像如下: ...
  • smooth L1 loss个人理解

    千次阅读 2019-10-28 10:56:41
    smooth L1 损失函数图像如下所示: L1损失的缺点就是有折点,不光滑,导致不稳定。 L2 loss的导数(梯度)中包含预测值与目标值的差值,当预测值和目标值相差很大,L2就会梯度爆炸。说明L2对异常点更敏感...
  • L1, L2以及smooth L1 loss

    万次阅读 2019-06-10 09:48:26
    通常的两个决策为:1) L1范数 vs L2范数 的损失函数; 2) L1正则化 vs L2正则化。 作为损失函数   L1范数损失函数,也被称为最小绝对值偏差(LAD),最小绝对值误差(LAE)。总的说来,它是把目标值(YiYi)与...
  • torch的SmoothL1Loss()是huber loss吗?网上说的是huber loss参数等于1的情况。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,007
精华内容 2,002
关键字:

smoothl1loss