之前一直自己手写各种triphard,triplet损失函数, 写的比较暴力,然后今天一个学长给我在github上看了一个别人的triphard的写法,一开始没看懂,用的pytorch函数没怎么见过,看懂了之后, 被惊艳到了。。因此在此记录一下,以及详细注释一下

class TripletLoss(nn.Module):def __init__(self, margin=0.3):super(TripletLoss, self).__init__()self.margin = marginself.ranking_loss = nn.MarginRankingLoss(margin=margin)  # 获得一个简单的距离triplet函数def forward(self, inputs, labels):n = inputs.size(0)  # 获取batch_size# Compute pairwise distance, replace by the official when mergeddist = torch.pow(inputs, 2).sum(dim=1, keepdim=True).expand(n, n)  # 每个数平方后, 进行加和(通过keepdim保持2维),再扩展成nxn维dist = dist + dist.t()  # 这样每个dis[i][j]代表的是第i个特征与第j个特征的平方的和dist.addmm_(1, -2, inputs, inputs.t())  # 然后减去2倍的 第i个特征*第j个特征 从而通过完全平方式得到 (a-b)^2dist = dist.clamp(min=1e-12).sqrt()  # 然后开方# For each anchor, find the hardest positive and negativemask = labels.expand(n, n).eq(labels.expand(n, n).t())  # 这里dist[i][j] = 1代表i和j的label相同, =0代表i和j的label不相同dist_ap, dist_an = [], []for i in range(n):dist_ap.append(dist[i][mask[i]].max().unsqueeze(0))  # 在i与所有有相同label的j的距离中找一个最大的dist_an.append(dist[i][mask[i] == 0].min().unsqueeze(0))  # 在i与所有不同label的j的距离找一个最小的dist_ap = torch.cat(dist_ap)  # 将list里的tensor拼接成新的tensordist_an = torch.cat(dist_an)# Compute ranking hinge lossy = torch.ones_like(dist_an)  # 声明一个与dist_an相同shape的全1tensorloss = self.ranking_loss(dist_an, dist_ap, y)return loss

转载于:https://www.cnblogs.com/kk17/p/10252440.html

[loss]Triphard loss优雅的写法相关推荐

  1. l1-norm loss l2-norm loss (l1范数和l2范数作为正则项的比较)

    l1-norm loss & l2-norm loss (l1范数和l2范数作为正则项的比较) l1-norm 和 l2-norm是常见的模型优化过程中的正则化项,对应到线性回归的领域分别为l ...

  2. tcp 接收端优雅的写法_如何更优雅地接收设计反馈

    tcp 接收端优雅的写法 重点 (Top highlight) It's rare to meet a designer that doesn't take pride in their work. ...

  3. L1/L2/smooth_l1_loss/center_loss+Dice Loss+focal loss+各种IOU loss+kl散度

    一.L1/L2/smooth_l1_loss/center_loss公式与代码 1.公式 L2公式: smooth_L1公式: 2.三种函数numpy代码实现 import numpy as np i ...

  4. Loss——Focal Loss

    Loss--Focal Loss 一.简介 Focal Loss论文地址:https://arxiv.org/pdf/1708.02002.pdf Focal Loss是基于Cross Entropy ...

  5. 类别不均衡问题之loss大集合:focal loss, GHM loss, dice loss 等等

    数据类别不均衡问题应该是一个极常见又头疼的的问题了.最近在工作中也是碰到这个问题,花了些时间梳理并实践了类别不均衡问题的解决方式,主要实践了"魔改"loss(focal loss, ...

  6. 《Focal Loss GHM Loss Dice Los》论文笔记

    Focal Loss 在二分类问题中,交叉熵损失定义如下: yyy 表示真实值,取值0与1,ppp表示模型预测正类的概率,取值0到1. 为了表述方便,将上述公式重新表述为: 对于类别不平衡问题,我们可 ...

  7. OHEM,Focal loss,GHM loss二分类pytorch代码实现(减轻难易样本不均衡问题)

    https://mp.weixin.qq.com/s/iOAICJege2b0pCVxPkvNiA 综述:解决目标检测中的样本不均衡问题 该综述主要介绍了OHEM,Focal loss,GHM los ...

  8. python优雅的写法

    python优雅的写法 1.同时为多个变量赋值 常规写法:逐个为变量赋值 a = 1 b = 2 c = 3 优雅写法:按变量顺序对应一一赋值 (a, b, c) = (1, 2, 3) 2.交换变量 ...

  9. 一文理解Ranking Loss/Contrastive Loss/Margin Loss/Triplet Loss/Hinge Loss

    一文理解Ranking Loss/Contrastive Loss/Margin Loss/Triplet Loss/Hinge Loss 翻译自FesianXu, 2020/1/13, 原文链接 h ...

最新文章

  1. html景图片怎么设置百分比,8个风光照片拍摄技巧
  2. 使用yeoman搭建脚手架并发布到npm
  3. Windows 10 周年更新正式版下载 + win10 快捷键
  4. c#让电脑锁定、注销、关机
  5. 电池供电的电容麦_电容麦一定需要幻象电源吗 幻象电源的作用是什么
  6. Archlinux 试用
  7. hadoop之 hadoop日志存放路径
  8. Oracle数据库集中复制方式浅议
  9. 昌邑机器人_昌邑四轴CNC加工齿模长沙四轴CNC加工精鑫精密
  10. android调用web接口,Android调用WebService系列之请求调用
  11. 洛谷3004 [USACO10DEC]宝箱Treasure Chest
  12. 文本不换行省略—input属性
  13. 无法访问网内计算机错误代码,电脑局域网无法访问共享ox80070035错误代码解决方法...
  14. web前端 作业 1
  15. 显示“Hello World”并转换为语音
  16. 计算机毕业设计Java智能超市导购系统(源码+系统+mysql数据库+lw文档)
  17. VIBE运动检测算法实现(二)
  18. 使用免费绿色工具chfs,将文件夹共享成网盘
  19. Centos7配置Hadoop出现Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)的解决
  20. ACT游戏开发记录之地图打包工具

热门文章

  1. Python基础知识:当字典碰到类时会发生什么?
  2. pycharmlinux报错java,Linux安装PyCharm时提示cannot start PyCharm错误怎么办?
  3. html搞笑注释,9个最有趣的代码注释
  4. 面向对象真的需要继承吗?
  5. 图像学习-HOG特征
  6. mysql 中序号要怎么写_如何在mysql的字段ID中插入自动编号?
  7. Java 面试之语言基础
  8. php form表单属性,HTML5 表单属性
  9. 第五章应用系统安全基础备考要点及真题分布
  10. 渗透测试入门24之渗透测试参考书、课程、工具、认证