loss函数之MarginRankingLoss
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_average
与reduce
已经弃用。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=1Nli,∑i=1Nli 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相关推荐
- 【Dual-Path-RNN-Pytorch源码分析】loss函数:SI-SNR
DPRNN使用的loss函数是 SI-SNR SI-SNR 是scale-invariant source-to-noise ratio的缩写,中文翻译为尺度不变的信噪比,意思是不受信号变化影响的信噪 ...
- tensorflow学习(4.loss函数以及正则化的使用 )
本文还是以MNIST的CNN分析为例 loss函数一般有MSE均方差函数.交叉熵损失函数,说明见 https://blog.csdn.net/John_xyz/article/details/6121 ...
- 多分类loss函数本质理解
一.面对一个多分类问题,如何设计合理的损失函数呢? 1.损失函数的本质在数学上称为目标函数:这个目标函数的目标值符合最完美的需求:损失函数的目标值肯定是0,完美分类的损失必然为0 : 2.损失函数分为 ...
- 深度学习基础(三)loss函数
loss函数,即损失函数,是决定网络学习质量的关键.若网络结构不变的前提下,损失函数选择不当会导致模型精度差等后果.若有错误,敬请指正,Thank you! 目录 一.loss函数定义 二.常见的lo ...
- Keras自定义Loss函数
Keras作为一个深度学习库,非常适合新手.在做神经网络时,它自带了许多常用的目标函数,优化方法等等,基本能满足新手学习时的一些需求.具体包含目标函数和优化方法.但它也支持用户自定义目标函数,下边介绍 ...
- 商汤使用AutoML设计Loss函数,全面超越人工设计
点击我爱计算机视觉标星,更快获取CVML新技术 深度学习领域,神经架构搜索得到的算法如雨后春笋般出现. 今天一篇arXiv论文<AM-LFS: AutoML for Loss Function ...
- 深度学习中的损失函数总结以及Center Loss函数笔记
北京 上海巡回站 | NVIDIA DLI深度学习培训 2018年1月26/1月12日 NVIDIA 深度学习学院 带你快速进入火热的DL领域 阅读全文 ...
- 'int' object has no attribute 'backward'报错 使用Pytorch编写 Hinge loss函数
在编写SVM中的Hinge loss函数的时候报错"'int' object has no attribute 'backward'" for epoch in range(50) ...
- 《深度学习笔记》——loss函数的学习笔记
1 loss的作用 在南溪看来,loss函数是对目标target和预测prediction之间的一种距离度量的公式: 2 loss函数的设计原则 此设计原则参考了距离的定义,(注意:距离跟范数是两个概 ...
最新文章
- python备份文件代码_python备份文件以及mysql数据库的脚本代码
- 指针应用-----链表二
- Java中native关键字
- pycharm显示全部数据_PyCharm第一次安装及使用教程
- 【SSM面向CRUD编程专栏 3】关于黑马程序员最全SSM框架教程视频,P37集老师跳过的模块创建以及tomcat下载安装配置和运行等诸多问题
- Markdown案例
- Words For Today [2011-07-31]
- Python - re - 正则表达式 - 怎么用
- 简单聊一聊PRINCE2与PMP的区别
- linux+多路复用socket,socket的select_多路复用
- 北大计算机最好的班叫什么,中国大学计算机最好的班,再次迎来“图灵奖”导师,赶超“姚班”...
- 在操作系统中进程是如何通信的
- 机器学习cnn如何改变权值_五个机器学习悖论将改变您对数据的思考方式
- delete了,析构函数却没有调用
- Operation和OperationQueue详解
- kali虚拟机连接外网VMnet8显示无分配网络权限
- vue 项目打包后可以改为动态配置域名地址
- 解决Anaconda安装包时报错CondaVerificationError: The package for pytorch located at...
- 迭代器 iter()
- 【计算机视觉】图像配准(Image Registration)
热门文章
- php修改密码功能md5,php – 更改密码哈希类型的最有效方法(md5到sha1)
- php rbac 菜单生成,RBAC集成AdminLTE后台主题对菜单进行控制
- C++ 内存空间初探
- 对计算机设备配置的认识,检测计算机硬件配置,知道你选购的计算机配置是否真实...
- 软件测试岗位,BAT大厂面试题集锦
- python实践项目(七)
- php基础 简书,PHP的基础(一)
- ios 搭建php,超级签名网源码+ios分发+签名端本地化+文字搭建教程_PHP源码
- java字符串遮蔽处理_java 字符串处理
- java所参数查询_Java程序查询系统参数