MarginRankingLoss

排序损失函数

对于包含NNN个样本的batch数据 D(x1,x2,y)D(x1,x2,y)D(x1,x2,y), x1x1x1, x2x2x2是给定的待排序的两个输入,yyy代表真实的标签,属于{1,−1}\{1,-1\}{1,−1}。当y=1y=1y=1是,x1x1x1应该排在x2x2x2之前,y=−1y=-1y=−1是,x1x1x1应该排在x2x2x2之后。第nnn个样本对应的losslossloss计算如下:

ln=max⁡(0,−y∗(x1−x2)+margin⁡)l_{n}=\max (0,-y *(x 1-x 2)+\operatorname{margin})ln​=max(0,−y∗(x1−x2)+margin)

若x1x1x1, x2x2x2排序正确且−y∗(x1−x2)>margin⁡-y *(x 1-x 2)>\operatorname{margin}−y∗(x1−x2)>margin, 则loss为0

class MarginRankingLoss(_Loss):__constants__ = ['margin', 'reduction']def __init__(self, margin=0., size_average=None, reduce=None, reduction='mean'):super(MarginRankingLoss, self).__init__(size_average, reduce, reduction)self.margin = margindef forward(self, input1, input2, target):return F.margin_ranking_loss(input1, input2, target, margin=self.margin, reduction=self.reduction)

pytorch中通过torch.nn.MarginRankingLoss类实现,也可以直接调用F.margin_ranking_loss 函数,代码中的size_averagereduce已经弃用。reduction有三种取值mean, sum, none,对应不同的返回ℓ(x,y)\ell(x, y)ℓ(x,y)。 默认为mean,对应于上述losslossloss的计算

L={l1,…,lN}L=\left\{l_{1}, \ldots, l_{N}\right\}L={l1​,…,lN​}

ℓ(x,y)={L⁡,if reduction =’none’ 1N∑i=1Nli,if reduction =’mean’ ∑i=1Nliif reduction =’sum’ \ell(x, y)=\left\{\begin{array}{ll}\operatorname L, & \text { if reduction }=\text { 'none' } \\ \frac1{N}\sum_{i=1}^{N} l_{i}, & \text { if reduction }=\text { 'mean' } \\ \sum_{i=1}^{N} l_{i} & \text { if reduction }=\text { 'sum' }\end{array} \right.ℓ(x,y)=⎩⎨⎧​L,N1​∑i=1N​li​,∑i=1N​li​​ if reduction = ’none’  if reduction = ’mean’  if reduction = ’sum’ ​

marginmarginmargin默认取值0

例子:

import torch
import torch.nn.functional as F
import torch.nn as nn
import mathdef validate_MarginRankingLoss(input1, input2, target, margin):val = 0for x1, x2, y in zip(input1, input2, target):loss_val = max(0, -y * (x1 - x2) + margin)val += loss_valreturn val / input1.nelement()torch.manual_seed(10)
margin = 0
loss = nn.MarginRankingLoss()
input1 = torch.randn([3], requires_grad=True)
input2 = torch.randn([3], requires_grad=True)
target = torch.tensor([1, -1, -1])
print(target)
output = loss(input1, input2, target)
print(output.item())output = validate_MarginRankingLoss(input1, input2, target, margin)
print(output.item())loss = nn.MarginRankingLoss(reduction="none")
output = loss(input1, input2, target)
print(output)

输出:

tensor([ 1, -1, -1])
0.015400052070617676
0.015400052070617676
tensor([0.0000, 0.0000, 0.0462], grad_fn=<ClampMinBackward>)

loss函数之MarginRankingLoss相关推荐

  1. 【Dual-Path-RNN-Pytorch源码分析】loss函数:SI-SNR

    DPRNN使用的loss函数是 SI-SNR SI-SNR 是scale-invariant source-to-noise ratio的缩写,中文翻译为尺度不变的信噪比,意思是不受信号变化影响的信噪 ...

  2. tensorflow学习(4.loss函数以及正则化的使用 )

    本文还是以MNIST的CNN分析为例 loss函数一般有MSE均方差函数.交叉熵损失函数,说明见 https://blog.csdn.net/John_xyz/article/details/6121 ...

  3. 多分类loss函数本质理解

    一.面对一个多分类问题,如何设计合理的损失函数呢? 1.损失函数的本质在数学上称为目标函数:这个目标函数的目标值符合最完美的需求:损失函数的目标值肯定是0,完美分类的损失必然为0 : 2.损失函数分为 ...

  4. 深度学习基础(三)loss函数

    loss函数,即损失函数,是决定网络学习质量的关键.若网络结构不变的前提下,损失函数选择不当会导致模型精度差等后果.若有错误,敬请指正,Thank you! 目录 一.loss函数定义 二.常见的lo ...

  5. Keras自定义Loss函数

    Keras作为一个深度学习库,非常适合新手.在做神经网络时,它自带了许多常用的目标函数,优化方法等等,基本能满足新手学习时的一些需求.具体包含目标函数和优化方法.但它也支持用户自定义目标函数,下边介绍 ...

  6. 商汤使用AutoML设计Loss函数,全面超越人工设计

    点击我爱计算机视觉标星,更快获取CVML新技术 深度学习领域,神经架构搜索得到的算法如雨后春笋般出现. 今天一篇arXiv论文<AM-LFS: AutoML for Loss Function ...

  7. 深度学习中的损失函数总结以及Center Loss函数笔记

    北京 上海巡回站 | NVIDIA DLI深度学习培训 2018年1月26/1月12日 NVIDIA 深度学习学院 带你快速进入火热的DL领域 阅读全文                        ...

  8. 'int' object has no attribute 'backward'报错 使用Pytorch编写 Hinge loss函数

    在编写SVM中的Hinge loss函数的时候报错"'int' object has no attribute 'backward'" for epoch in range(50) ...

  9. 《深度学习笔记》——loss函数的学习笔记

    1 loss的作用 在南溪看来,loss函数是对目标target和预测prediction之间的一种距离度量的公式: 2 loss函数的设计原则 此设计原则参考了距离的定义,(注意:距离跟范数是两个概 ...

最新文章

  1. python备份文件代码_python备份文件以及mysql数据库的脚本代码
  2. 指针应用-----链表二
  3. Java中native关键字
  4. pycharm显示全部数据_PyCharm第一次安装及使用教程
  5. 【SSM面向CRUD编程专栏 3】关于黑马程序员最全SSM框架教程视频,P37集老师跳过的模块创建以及tomcat下载安装配置和运行等诸多问题
  6. Markdown案例
  7. Words For Today [2011-07-31]
  8. Python - re - 正则表达式 - 怎么用
  9. 简单聊一聊PRINCE2与PMP的区别
  10. linux+多路复用socket,socket的select_多路复用
  11. 北大计算机最好的班叫什么,中国大学计算机最好的班,再次迎来“图灵奖”导师,赶超“姚班”...
  12. 在操作系统中进程是如何通信的
  13. 机器学习cnn如何改变权值_五个机器学习悖论将改变您对数据的思考方式
  14. delete了,析构函数却没有调用
  15. Operation和OperationQueue详解
  16. kali虚拟机连接外网VMnet8显示无分配网络权限
  17. vue 项目打包后可以改为动态配置域名地址
  18. 解决Anaconda安装包时报错CondaVerificationError: The package for pytorch located at...
  19. 迭代器 iter()
  20. 【计算机视觉】图像配准(Image Registration)

热门文章

  1. php修改密码功能md5,php – 更改密码哈希类型的最有效方法(md5到sha1)
  2. php rbac 菜单生成,RBAC集成AdminLTE后台主题对菜单进行控制
  3. C++ 内存空间初探
  4. 对计算机设备配置的认识,检测计算机硬件配置,知道你选购的计算机配置是否真实...
  5. 软件测试岗位,BAT大厂面试题集锦
  6. python实践项目(七)
  7. php基础 简书,PHP的基础(一)
  8. ios 搭建php,超级签名网源码+ios分发+签名端本地化+文字搭建教程_PHP源码
  9. java字符串遮蔽处理_java 字符串处理
  10. java所参数查询_Java程序查询系统参数