pytorch-metric-learning 正则化器(Regularizers)完全指南:用法、源码原理与实战配置
人工智能机器学习深度学习计算机视觉【免费下载链接】pytorch-metric-learningThe easiest way to use deep metric learning in your application. Modular, flexible, and extensible. Written in PyTorch.项目地址https://gitcode.com/gh_mirrors/py/pytorch-metric-learning点击查看免费下载导读本文档系统讲解 pytorch-metric-learning 中的正则化器Regularizers模块。正则化器是唯一一种**既不依赖标签、也不依赖元组tuples**就能施加约束的组件——它直接作用于网络的权重weights或嵌入embeddings例如限制嵌入范数、惩罚过于接近的类中心、促使多个类中心合并等。读完本文你将掌握 6 个内置正则化器BaseRegularizer、CenterInvariantRegularizer、LpRegularizer、RegularFaceRegularizer、SparseCentersRegularizer、ZeroMeanRegularizer的构造参数、默认配置、源码级实现原理以及如何把它们挂接到ArcFaceLoss等带权重的损失函数上为你的度量学习实验增加正则约束。什么是 Regularizer无标签、无元组的约束在 pytorch-metric-learning 中损失函数losses依赖标签与正负样本元组挖掘器miners依赖距离排序而正则化器regularizers被应用到权重和嵌入上完全不需要标签或元组。它们通常作为辅助损失项叠加在主损失之上用于约束参数空间从而提升泛化能力。以一个权重正则化器传给损失函数的经典示例为例from pytorch_metric_learning import losses, regularizers R regularizers.RegularFaceRegularizer() loss losses.ArcFaceLoss(margin30, num_classes100, embedding_size128, weight_regularizerR)这里RegularFaceRegularizer被传入ArcFaceLoss的weight_regularizer参数它会在主损失之外额外计算一项类中心互斥正则损失直接惩罚彼此过于接近的类向量。正则化器如何接入损失函数从源码来看正则化器的接入点由 mixins.py 中的两个 Mixin 决定WeightRegularizerMixin提供weight_regularizer与weight_reg_weight参数weight_regularization_loss方法会计算self.weight_regularizer(weights) * self.weight_reg_weight并把结果写入损失字典中的weight_reg_loss键EmbeddingRegularizerMixin提供embedding_regularizer与embedding_reg_weight参数计算self.embedding_regularizer(embeddings) * self.embedding_reg_weight结果写入embedding_reg_loss键。在 base_metric_loss_function.py 中所有损失函数都继承了EmbeddingRegularizerMixin因此任何损失函数都可以接收embedding_regularizer而所有继承了WeightRegularizerMixin的损失函数如 large_margin_softmax_loss.py 中的LargeMarginSoftmaxLoss、normalized_softmax_loss.py 中的NormalizedSoftmaxLoss、proxy_anchor_loss.py 中的ProxyAnchorLoss、proxy_losses.py 中的ProxyNCALoss、soft_triple_loss.py 中的SoftTripleLoss都可以接收weight_regularizer。注意weight_reg_weight与embedding_reg_weight的默认值均为1用于控制正则项在总损失中的占比实际使用时可根据任务调整。BaseRegularizer所有正则化器的基类所有正则化器都继承自BaseRegularizer其构造函数签名如下regularizers.BaseWeightRegularizer(collect_stats False, reducer None, distance None)文档中该基类命名为BaseWeightRegularizer其源码实际类名位于 base_regularizer.py类名为BaseRegularizer二者指的是同一类使用时以regularizers.BaseRegularizer为准。参数说明参数说明collect_stats若为True会收集各种统计数据如同一类中心相似度、不同类中心相似度供实验分析使用若为False则跳过这些计算。想让True成为全局默认值可设置全局 COLLECT_STATS 标志对应 common_functions.py 中的COLLECT_STATS False。reducer一个 reducer 对象用于聚合逐元素损失。若为None使用默认 reducer。distance一个 distance 对象用于计算相似度/距离。若为None使用默认 distance。默认 distanceLpDistance(normalize_embeddingsTrue, p2, power1)默认 reducerMeanReducer源码级执行流程BaseRegularizer继承自ModuleWithRecordsReducerAndDistance其核心执行逻辑在forward方法中base_regularizer.pydef forward(self, x): # x 的形状应为 (N, embedding_size) self.reset_stats() loss_dict self.compute_loss(x) return self.reducer(loss_dict, x, c_f.torch_arange_from_size(x))流程分三步① 重置统计状态② 调用子类实现的compute_loss计算逐元素损失字典③ 交给reducer聚合为标量损失。子类只需要实现compute_loss并可按需覆写get_default_distance/get_default_reducer来定义默认配置。CenterInvariantRegularizer中心不变正则化论文出处Deep Face Recognition with Center Invariant Loss该正则化器鼓励未归一化的嵌入或权重拥有相同的 Lp 范数即使得所有样本/类中心的范数趋向一致。regularizers.CenterInvariantRegularizer(**kwargs)默认 distanceLpDistance(normalize_embeddingsFalse, p2, power1)约束必须是LpDistance(normalize_embeddingsFalse, power1)但p可以修改。默认 reducerMeanReducer源码实现原理在 center_invariant_regularizer.py 中__init__通过c_f.assert_distance_type(self, LpDistance, power1, normalize_embeddingsFalse)强制校验距离类型——这正是必须是LpDistance(normalize_embeddingsFalse, power1)这一约束的源码依据compute_loss先利用self.distance.get_norm(weights) ** 2计算每个向量的平方范数再计算其与全体均值torch.mean(...)的偏差最终损失为偏差平方的 1/4squared_weight_norms self.distance.get_norm(weights) ** 2 deviations_from_mean squared_weight_norms - torch.mean(squared_weight_norms) losses (deviations_from_mean**2) / 4该损失鼓励各向量范数围绕均值收敛从而中心不变。LpRegularizer小 Lp 范数正则化该正则化器鼓励嵌入/权重拥有较小的 Lp 范数起到类似权重衰减的约束作用。regularizers.LpRegularizer(p2, power1, **kwargs)参数说明参数说明p范数的类型。例如p1是曼哈顿距离L1 范数p2是欧氏距离L2 范数。默认 distance该正则化器不使用 distance 对象设置该参数不会产生任何效果。默认 reducerMeanReducer源码实现原理在 lp_regularizer.py 中compute_loss对每一行向量计算torch.norm(embeddings, pself.p, dim1)若power ! 1则再取power次幂即reg reg ** self.power。因此p2, power2时等价于对嵌入施加 L2 平方范数正则。p与power会被注册为可记录属性add_to_recordable_attributes便于在实验日志中查看。RegularFaceRegularizer类中心互斥正则化论文出处RegularFace: Deep Face Recognition via Exclusive Regularization应作为权重正则化器weight regularizer使用它惩罚彼此非常接近的类向量class vectors促使各类中心在嵌入空间中充分分离。regularizers.RegularFaceRegularizer(**kwargs)默认 distanceCosineSimilarity()只有 inverted 距离兼容。例如 DotProductSimilarity() 也可以使用。默认 reducerMeanReducer源码实现原理在 regular_face_regularizer.py 中实现参考自 http://kaizhao.net/regularface__init__中断言self.distance.is_inverted——这就是只有 inverted 距离兼容的源码依据CosineSimilarity与DotProductSimilarity均为 inverted 距离值越大表示越相似compute_loss计算权重矩阵的两两相似度矩阵cos随后在torch.no_grad()下把对角线置为负无穷fill_diagonal_通过self.distance.smallest_dist找到每一行每个类中心最相似的其他类中心构造 one-hot 掩码mask最终损失为每个类中心与其最相似类中心的相似度之和losses torch.sum(cos * mask, dim1)。也就是说某个类中心与其最近邻类中心越相似相似度越大正则损失越大从而推动类中心相互排斥、拉开间距。SparseCentersRegularizer稀疏中心正则化论文出处SoftTriple Loss: Deep Metric Learning Without Triplet Sampling应作为权重正则化器使用它鼓励一个类的多个类中心合并merge即互相靠拢聚集。该正则化器通常配合SoftTripleLoss使用一个类由多个中心表示同时希望同类的多个中心保持紧凑。regularizers.SparseCentersRegularizer(num_classes, centers_per_class, **kwargs)参数说明参数说明num_classes训练数据集中类别的数量。centers_per_class权重矩阵中对应单个类别的行数即每个类用几个中心表示。默认 distanceCosineSimilarity()这是唯一兼容的距离。默认 reducerDivisorReducer源码实现原理在 sparse_centers_regularizer.py 中__init__中断言centers_per_class 1每个类至少要有 2 个中心才有合并可言并通过c_f.assert_distance_type(self, CosineSimilarity)强制距离类型必须为CosineSimilarity——这就是唯一兼容距离的源码依据set_class_masks会构造两个布尔掩码矩阵same_class_mask标记同一类别内部中心对仅取上三角避免重复计数与diff_class_mask标记不同类别的中心对compute_loss先计算全部中心的相似度矩阵取同类中心对的相似度2.0 * center_similarities[self.same_class_mask]并clamp到最大值 2再计算reg torch.sqrt(2.0 small_val - center_similarities_masked)——相似度越高越接近 1该项越小从而鼓励同类中心靠拢损失字典中携带自定义divisor2 * torch.sum(self.same_class_mask)由DivisorReducer完成归一化求和见 divisor_reducer.py 的sum_and_dividetorch.sum(losses) / divisor当collect_statsTrue时还会记录same_class_center_sim与diff_class_center_sim两个统计量用于观察同类/异类中心相似度的变化趋势。ZeroMeanRegularizer零均值正则化论文出处Signal-to-Noise Ratio: A Robust Distance Metric for Deep Metric Learningregularizers.ZeroMeanRegularizer(**kwargs)计算公式公式中N为 batch sizeM为每个嵌入的维度size。默认 distance该正则化器不使用 distance 对象设置该参数不会产生任何效果。默认 reducerMeanReducer源码实现原理在 zero_mean_regularizer.py 中compute_loss的实现非常简洁对每个嵌入向量按维度求和并取绝对值即losses torch.abs(torch.sum(embeddings, dim1))。该损失鼓励嵌入在各维度上的和趋近于零即嵌入向量围绕原点呈零均值分布这与 signal_to_noise_ratio_losses.py 中基于信噪比的损失设计相互呼应常用于需要约束嵌入统计分布的实验。实战如何在训练中组合使用正则化器正则化器既可以作用于权重也可以作用于嵌入两者可同时使用from pytorch_metric_learning import losses, regularizers # 权重正则化推动类中心互斥 R regularizers.RegularFaceRegularizer() # 嵌入正则化约束嵌入范数 E regularizers.LpRegularizer(p2, power1) loss losses.ArcFaceLoss( margin30, num_classes100, embedding_size128, weight_regularizerR, weight_reg_weight1.0, # 可选调整正则项占比 embedding_regularizerE, # 可选作用于嵌入的正则化器 embedding_reg_weight1.0, )要点归纳weight_regularizer仅对继承WeightRegularizerMixin的损失函数可用如ArcFaceLoss、NormalizedSoftmaxLoss、ProxyAnchorLoss、ProxyNCALoss、SoftTripleLossembedding_regularizer任何损失函数都可用因为它继承自EmbeddingRegularizerMixin见 base_metric_loss_function.py六个内置正则化器统一从 regularizers/init.py 导出导入方式为from pytorch_metric_learning import regularizers若开启collect_stats或设置全局COLLECT_STATS True正则化器会记录如same_class_center_sim、diff_class_center_sim、divisor等统计量配合 logging_presets 可在训练日志中观察正则约束的收敛趋势仓库测试覆盖了各正则化器的数值正确性见 tests/regularizers/test_regular_face_regularizer.py 与 tests/regularizers/test_center_invariant_regularizer.py以及 tests/losses/test_soft_triple_loss.py 等与损失组合的测试可作为自行验证实现的参考。附内置正则化器速查表正则化器作用对象核心效果默认 distance默认 reducer关键参数CenterInvariantRegularizer嵌入/权重使所有向量范数一致LpDistance(normalize_embeddingsFalse, power1)MeanReducerp可改LpRegularizer嵌入/权重使范数尽量小不使用 distanceMeanReducerp、powerRegularFaceRegularizer权重惩罚接近的类中心互斥CosineSimilarity()inverted 距离均可MeanReducer—SparseCentersRegularizer权重鼓励同类多个中心合并CosineSimilarity()唯一兼容DivisorReducernum_classes、centers_per_classZeroMeanRegularizer嵌入/权重使各维求和趋近于零不使用 distanceMeanReducer—赞分享人工智能机器学习深度学习计算机视觉【免费下载链接】pytorch-metric-learningThe easiest way to use deep metric learning in your application. Modular, flexible, and extensible. Written in PyTorch.项目地址https://gitcode.com/gh_mirrors/py/pytorch-metric-learning点击查看免费下载相关推荐PyTorch Metric Learning 安装与配置完全指南PyTorch Metric Learning 安装与配置完全指南 项目基础介绍与编程语言 PyTorch Metric Learning 是一个深度度量学习领人工智能机器学习深度学习计算机视觉PyTorch Metric Learning正则化器从Lp正则化到中心不变性PyTorch Metric Learning正则化器从Lp正则化到中心不变性 PyTorch Metric Learning是一个强大的深度度量学习库它提人工智能机器学习深度学习计算机视觉PyTorch Metric Learning损失函数自定义距离、约简器与正则化器完全指南PyTorch Metric Learning损失函数自定义距离、约简器与正则化器完全指南 想要在深度度量学习中实现最佳性能PyTorch Metric L人工智能机器学习深度学习计算机视觉上一篇旧电视盒子装 Armbian3 步把 Amlogic 盒子改成长期在线的 Linux 服务器下一篇城通网盘直连解析工具深度体验与技术剖析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

HCI考试题库.docx解析与结构化:从Word到可检索题库的完整实践

HCI考试题库.docx解析与结构化:从Word到可检索题库的完整实践

简介:这份HCI考试题库文档面向备考华为超融合认证的考生与云计算运维学习者,聚焦HCI核心知识点的自测与查漏补缺。内容以单选题为主,覆盖分布式虚拟防火墙、aSAN分布式存储、四网复用技术、虚拟机配置最佳实践、网络平面划分、FIO测试用法、a…

2026/10/8 1:38:37 阅读更多 →
RWKV-Runner 完全指南:一键部署、OpenAI 兼容 API 与 MIDI 音乐创作实战

RWKV-Runner 完全指南:一键部署、OpenAI 兼容 API 与 MIDI 音乐创作实战

人工智能大模型本地部署AI 应用模型推理服务 【免费下载链接】RWKV-Runner A RWKV management and startup tool, full automation, only 8MB. And provides an interface compatible with the OpenAI API. RWKV is a large language model that is fully open source and avai…

2026/10/8 1:38:37 阅读更多 →
置信度增强的 Sauvola 二值化:文档图像前景信息保留算法解析与实战(computervision-recipes)

置信度增强的 Sauvola 二值化:文档图像前景信息保留算法解析与实战(computervision-recipes)

计算机视觉深度学习 【免费下载链接】computervision-recipes Best Practices, code samples, and documentation for Computer Vision. 项目地址: https://gitcode.com/gh_mirrors/co/computervision-recipes 点击查看 免费下载 本文围绕 computervision-recipes …

2026/10/9 2:53:39 阅读更多 →

最新新闻

基于SpringBoot+MyBatisPlus的毕业季旅游定制平台设计

基于SpringBoot+MyBatisPlus的毕业季旅游定制平台设计

每年到毕业设计季,我总会被问到一个问题:Java方向到底选个什么题目,既能保证工作量、又能把技术栈讲清楚,还不至于做到一半自己先想放弃?如果你打算走 SpringBoot 这条线,我一直比较推荐「毕业季旅游一站式…

2026/10/9 4:09:34 阅读更多 →
DeepSeek政务智能体实战:接入、RAG与避坑

DeepSeek政务智能体实战:接入、RAG与避坑

简介:一份265页的政务系统接入DeepSeek构建智能体提效方案,面向政务信息化从业者、产品经理与技术架构师,针对传统政务系统效率瓶颈、人工流程繁琐和决策支持不足等问题,提供从背景目标到技术落地的完整路径。压缩包内含1个docx文…

2026/10/9 4:09:34 阅读更多 →
实时滤波器边界测试:从鲁棒性到状态管理的实战经验

实时滤波器边界测试:从鲁棒性到状态管理的实战经验

做实时信号处理的这些年,我对“鲁棒性”这个词越来越敬畏。很多滤波器在仿真阶段表现得很完美,一到真实数据里就原形毕露——问题往往出在那些大家都默认“输入应该是正常信号”的假设上。最近我就在给FilterSignalAndUpdate方法补测试。这个方法表面上很…

2026/10/9 4:09:34 阅读更多 →
B2C商城系统测试报告:核心链路验证与性能调优全解析

B2C商城系统测试报告:核心链路验证与性能调优全解析

这份测试报告对应的软件对象,是一套典型的B2C自营商城系统,覆盖用户端、商家端和运营端三个门户场景。项目主线走过了两轮功能迭代,本次测试属于上线前的系统级验证,目标很明确:确认商城核心链路能不能支撑真实业务跑起…

2026/10/9 4:09:34 阅读更多 →
FastReport VCL 2025.2 在 Delphi 13 中的安装部署与避坑实践

FastReport VCL 2025.2 在 Delphi 13 中的安装部署与避坑实践

简介:一份面向Delphi 13(Florence)开发者的报表组件零售包,集成FastReport VCL v2025.2,用于快速完成报表设计、多数据源绑定、打印及导出。压缩包共2000个文件,以1466个hpp头文件、210个dcu编译单元为主&a…

2026/10/9 4:09:34 阅读更多 →
SSM+Vue毕设项目实战:颜值评分管理系统设计与部署全解析

SSM+Vue毕设项目实战:颜值评分管理系统设计与部署全解析

1. 项目定位与技术选型分析“美了吗颜值管理中心”这个名字听起来有点娱乐向,但本质上一个典型的 Java Web 后台管理系统,技术栈选了 SSM Vue 这对经典组合。我做毕设辅导这些年,见过太多人选了花里胡哨的技术栈最后把自己坑惨的案例&#x…

2026/10/9 4:08:34 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 13:34:55 阅读更多 →