损失函数总结(十):TripletMarginLoss、TripletMarginWithDistanceLoss

news2024/11/19 9:39:45

损失函数总结(十):TripletMarginLoss、TripletMarginWithDistanceLoss

  • 1 引言
  • 2 损失函数
    • 2.1 TripletMarginLoss
    • 2.2 TripletMarginWithDistanceLoss
  • 3 总结

1 引言

在前面的文章中已经介绍了介绍了一系列损失函数 (L1LossMSELossBCELossCrossEntropyLossNLLLossCTCLossPoissonNLLLossGaussianNLLLossKLDivLossBCEWithLogitsLossMarginRankingLossHingeEmbeddingLossMultiMarginLossMultiLabelMarginLossSoftMarginLossMultiLabelSoftMarginLoss)。在这篇文章中,会接着上文提到的众多损失函数继续进行介绍,给大家带来更多不常见的损失函数的介绍。这里放一张损失函数的机理图:
在这里插入图片描述

2 损失函数

2.1 TripletMarginLoss

论文链接:Learning local feature descriptors with triplets and shallow convolutional neural networks

TripletMarginLoss 是一种损失函数,不同于交叉熵损失仅仅考虑样本与类别标签之间误差,TripletMarginLoss 关注样本与其他样本之间距离。在输入张量 x1、x2、x3 和边际值大于 0 的情况下,创建一个用于测量三元组损失的标准。一个三元组由 a、p 和 n(即分别为正样本负样本)组成。所有输入张量的形状应为 (N,D)小批量每个样品的损失函数为::
L ( a , p , n ) = m a x { d ( a i , p i ) − d ( a i , n i ) + m a r g i n , 0 } L(a,p,n)=max\{d(a_i,p_i)−d(a_i,n_i)+margin,0\} L(a,p,n)=max{d(ai,pi)d(ai,ni)+margin,0}

其中:
d ( x i , y i ) = ∥ x i − y i ∥ p d(x_i,y_i)=∥x_i−y_i∥_p d(xi,yi)=xiyip

  • 损失函数目标:最小化损失函数,使得锚点与正例的距离越小,与负例的距离越大。
  • m a r g i n margin margin: 人为设置的常数。

代码实现(Pytorch):

triplet_loss = nn.TripletMarginLoss(margin=1.0, p=2, eps=1e-7)
anchor = torch.randn(100, 128, requires_grad=True)
positive = torch.randn(100, 128, requires_grad=True)
negative = torch.randn(100, 128, requires_grad=True)
output = triplet_loss(anchor, positive, negative)
output.backward()

在siamese net或者Triplet net任务中被广泛使用。。。。

2.2 TripletMarginWithDistanceLoss

TripletMarginWithDistanceLoss 函数与 TripletMarginLoss功能基本一致,只不过可以定制化的传入不同的距离函数。当传入的距离函数是torch.nn.PairwiseDistance时,两者完全一致。

使用自定义损失函数,代码实现(Pytorch):

import torch
import torch.nn as nn
import torch.nn.functional as F

torch.manual_seed(20)
triplet_loss = nn.TripletMarginLoss(margin=1.0, p=2)
anchor = torch.randn(100, 128, requires_grad=True)
positive = torch.randn(100, 128, requires_grad=True)
negative = torch.randn(100, 128, requires_grad=True)


# Custom Distance Function
def l_infinity(x1, x2):
    return torch.max(torch.abs(x1 - x2), dim=1).values
triplet_loss = nn.TripletMarginWithDistanceLoss(distance_function=l_infinity, margin=1.5)
output = triplet_loss(anchor, positive, negative)
print(output.item())

# Custom Distance Function (Lambda)
triplet_loss = nn.TripletMarginWithDistanceLoss(
    distance_function=lambda x, y: 1.0 - F.cosine_similarity(x, y))
output = triplet_loss(anchor, positive, negative)
print(output.item())

输出结果:

1.529929518699646
1.0007251501083374

在siamese net或者Triplet net任务中被广泛使用。。。。

3 总结

到此,使用 损失函数总结(十) 已经介绍完毕了!!! 如果有什么疑问欢迎在评论区提出,对于共性问题可能会后续添加到文章介绍中。如果存在没有提及的损失函数也可以在评论区提出,后续会对其进行添加!!!!

如果觉得这篇文章对你有用,记得点赞、收藏并分享给你的小伙伴们哦😄。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1150064.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

腾讯云轻量应用服务器“镜像”选择和“镜像类型”说明

腾讯云轻量应用服务器镜像是什么?镜像就是操作系统,轻量服务器镜像系统怎么选择?如果是用来搭建网站腾讯云百科txybk.com建议选择选择宝塔Linux面板腾讯云专享版,镜像系统根据实际使用来选择,腾讯云百科来详细说下腾讯…

HTML标签、CSS介绍

标签的分类: 块级/行内 # 块级标签: 独占一行 h1~h6 p div """ 块儿级标签可以修改长宽. 行内标签不可以, 就算修改了也不会变化.块级标签内部可以嵌套任意的块级标签和行内标签. 特例: 是p标签虽然是块级标签 但是它只能嵌套行内标签 不能嵌套块级标签. 如…

1月18-19日|2024中国亚洲鞋业国际峰会

2024中国&亚洲鞋业国际峰会 2024年1月18-19,上海 主办方:ECV International 峰会背景 在全球时尚产业减排的关键期,作为仅次于石化工业的第二大污染产业,时尚行业的绿色生产迫在眉睫。一直以来,制鞋行业都是环境…

优思学院|精益管理是如何帮助提高企业生产率的?

精益管理是一种生产管理理念,其目标是最大化价值,同时最小化浪费,通过消除浪费并提高效率来缩短交付周期、提高产品质量和降低成本。这种方法通常通过持续改进、标准化工作流程和消除缺陷来实现。 精益制造管理的理念如同一盏明灯&#xff0…

在Win10系统进行MySQL的安装、连接、卸载

在Win10系统进行MySQL的安装、连接、卸载 MySQL的安装 本教程在Win10系统下安装部署MySQL-8.0.32版。 MySQL安装参考地址 MySQL安装包地址 提取码: rnbc。 选择下载mysql-installer-community-8.0.32.0安装包。 连接数据库 方式一: 安装后,可以在开始菜单的列表中找到MySQ…

前端打印表格功能+单号生成条形码

第一种打印方法:不需要下载任何插件 浏览器自带打印功能(不太推荐),原理是生成新的页面后被打印,当打印完成或者取消打印时,页面需要强制刷新,否则页面无法回显。 //打印功能 print() {var pr…

3D RPG Course | Core 学习日记二:PolyBrush / Pro Builder构建场景

前言 我们这次将要学习的是使用PolyBrush和Pro Buillder构建精美的游戏场景。 PolyBrush 在Package Manager中导入的时候要注意,将Shader Examples(URP)也一起导入,不然PolyBrush对URP渲染的素材进行操作时会出现问题。 导入完成之后在Tools里将…

EDUSRC-记一次登录过程中的信息泄露

语法 org"China Education and Research Network Center" && body"登录" 起因 在进行登录测试的时候发现一处登录框 闲来无事抓个包输入个账号密码 问题是后端没抓到包,但是前端跳出了提示,账号密码错误 这极大的可能是…

c语言运算符表达式

c语言运算符表达式 c语言运算符表达式 c语言运算符表达式一、算数运算符二、赋值运算符【 - * / %】三、比较运算符【 > < > < !】 一、算数运算符 算数运算符&#xff1a; 用于各类数值运算。包括加()、减(-)、乘(*)、除(/)、求余(或称模运算&#xff0c;%)、…

【HTML】HTML基础知识扫盲

1、什么是HTML&#xff1f; HTML是超文本标记语言&#xff08;Hyper Text Markup Language&#xff09;是用来描述网页的一种语言 注意&#xff1a; HTML不是编程语言&#xff0c;而是标记语言 HTML文件也可以直接称为网页&#xff0c;浏览器的作用就是读取HTML文件&#xff…

使用@antv/g2plot实现文字权重分布划分图

最后效果展示 安装antv/g2plot npm i antv/g2plot 使用&#xff0c;示例是使用vue3viteunocss <template><div class"w-440px h-200px" id"wordcloudG2"></div> </template><script setup lang"ts"> import { …

vant4的基础用法

基于vue3和ts平台来使用 这篇文章会手把手的教你如何用vant开发h5 介绍 Vant 是一个轻量、可靠的移动端组件库&#xff0c;基于 Vue3&#xff0c;由有赞开发并且维护。有赞作为早期以 H5 商城、小程序商城做微信生态的起家&#xff0c; Vant 一直是这些产品的主要组成部分&am…

“软件开发报价混乱?看这一篇就够了!“

大家好&#xff0c;今天我们要聊一聊软件开发报价的那些事儿。相信很多企业和个人都曾为此犯过愁&#xff0c;看着报价单上一串串数字&#xff0c;心里直犯嘀咕&#xff1a;这价格靠谱吗&#xff1f;是不是被忽悠了&#xff1f;别急&#xff0c;今天我们就来揭开软件开发报价的…

小型内衣裤洗衣机哪个牌子好?迷你洗衣机品牌推荐

近日&#xff0c;国内著名的电子商务平台公布了“内衣洗衣机产业趋势”的研究报告。该报告指出&#xff0c;由于消费者对生活质量的要求越来越高&#xff0c;内衣洗衣机的行业也有了长足的发展&#xff0c;特别是在今年以来&#xff0c;内衣洗衣机的销售额同比上涨了830%&#…

PDF文件恢复?记住这3个就够了!

“各位大佬&#xff01;我想问问如果不小心删除了电脑中的PDF文件&#xff0c;还有什么方法将它们找回来吗&#xff1f;我丢失的是比较重要的文件&#xff0c;希望大家帮我出出主意&#xff01;” PDF文件现在越来越成为受用户青睐的一种文件保存方式。使用PDF格式的文件能更有…

Anaconda下载安装以及环境变量的配置

一、下载安装anaconda 可以在官网下载&#xff1a;Anaconda | The World’s Most Popular Data Science Platform 也直接用清华源镜像进行下载&#xff1a;Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 按照需要选则自己需要的版本…

2023年Q3户外装备市场行业分析报告(京东数据分析):同比增长7%,品牌化发展是核心

近年来&#xff0c;户外运动在我国不少地方蓬勃兴起&#xff0c;发展至今&#xff0c;户外运动早已不是聚焦专业领域的小众群体活动&#xff0c;现已发展成为当下热门的大众休闲活动&#xff0c;参与人群愈发广泛&#xff0c;而这股热潮也带动着相关产业的发展。 今年Q3&#x…

基于非对称加密证书(算法)机制实现的单向身份鉴别和双向身份鉴别原理

单向认证一般是指客户端确认服务端身份&#xff0c;而双向认证一般是指客户端和服务器端都需要验证对方的身份。 双向认证的客户端需要从服务器端下载服务器的公钥证书进行验证&#xff0c;还需要把客户端的公钥证书上传到服务器端给服务器端进行验证&#xff0c;等双方都认证…

内网穿透的应用-如何在Termux 中使用SFTP 文件传输并结合内网穿透实现远程传输

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP&#xff08;SSH File Transfer Protocol&#xff09;是一种基于SSH&#xff08;Secure Shell&#xff09;安全协议的文件传输协议。与FTP协议相比&#xff0c;SFTP使用了…

Linux C语言开发-D15一维数组

数组&#xff1a;有一定顺序关系的数据类型相同变量的变量集合 形式&#xff1a;<存储类型> <数据类型> <数组名> [<表达式>] 数组名表示内存首地址&#xff0c;是一个地址常量&#xff0c;sizeof(数组名)是数组占用的总内存空间 编译时分配连续内存…