PyTorch Metric Learning中的采样器(Samplers)详解

PyTorch Metric Learning中的采样器(Samplers)详解

引言

在深度度量学习领域,如何有效地组织训练数据批次对模型性能有着至关重要的影响。PyTorch Metric Learning项目提供了一系列精心设计的采样器(Samplers),专门用于优化度量学习任务的训练过程。本文将深入解析这些采样器的工作原理、适用场景及使用方法。

采样器基础概念

采样器是PyTorch数据加载流程中的关键组件,继承自torch.utils.data.Sampler类。在度量学习中,采样器的主要职责是:

  1. 控制批次数据的组织形式
  2. 实现离线样本对或三元组挖掘
  3. 优化训练过程中的样本分布

这些采样器可以直接传递给PyTorch的DataLoader,通过samplerbatch_sampler参数进行配置。

MPerClassSampler:类别均衡采样器

核心思想

MPerClassSampler确保每个批次中包含每个类别的固定数量样本,这对于度量学习特别重要,因为它保证了每个批次中都有足够的同类和不同类样本进行比较。

技术细节

samplers.MPerClassSampler(labels, m, batch_size=None, length_before_new_iter=100000)

参数解析

  • labels:数据集的标签列表,labels[x]对应数据集中第x个元素的标签
  • m:每次迭代每个类别采样的样本数。如果某类样本数不足m,返回的批次中会有重复样本
  • batch_size:可选参数。指定后,每个批次保证有m个样本/类。需满足:
    • batch_size必须是m的倍数
    • length_before_new_iter >= batch_size
    • m * (唯一标签数) >= batch_size
  • length_before_new_iter:创建新可迭代对象前的迭代次数

使用场景

适用于需要严格控制每个类别样本数量的场景,特别是在类别不平衡的数据集上训练时。

HierarchicalSampler:层次化采样器

核心思想

基于《Deep Metric Learning to Rank》论文实现,该采样器引入层次化采样策略,模拟现实世界中的类别层次结构。

技术细节

samplers.HierarchicalSampler(
    labels,
    batch_size,
    samples_per_class,
    batches_per_super_tuple=4,
    super_classes_per_batch=2,
    inner_label=0,
    outer_label=1,
)

参数解析

  • labels:二维数组,每行对应一个样本,列对应层次化标签
  • batch_size:必须指定,且需是super_classes_per_batchsamples_per_class的倍数
  • samples_per_class:每类每批次的样本数。设为"all"可使用类的所有元素(适合少样本学习)
  • batches_per_super_tuple:为每个超类元组创建的批次数,影响采样器返回的迭代器长度
  • super_classes_per_batch:每批次的超类数
  • inner_labellabels中对应类的列索引
  • outer_labellabels中对应超类的列索引

使用场景

特别适合具有自然层次结构的数据,如生物分类、产品目录等。

TuplesToWeightsSampler:基于元组的加权采样器

核心思想

这是一种离线挖掘器,通过分析样本在困难元组中出现的频率来调整采样权重。

技术细节

samplers.TuplesToWeightsSampler(
    model, 
    miner, 
    dataset, 
    subset_size=None, 
    **tester_kwargs
)

参数解析

  • model:用于计算嵌入向量的模型
  • miner:用于从计算出的嵌入中寻找困难元组
  • dataset:采样源数据集
  • subset_size:如果不为None,则使用数据集的随机子集进行挖掘,避免内存不足
  • tester_kwargs:传递给BaseTester的其他参数

工作流程

  1. 随机选择数据集子集(如果指定了subset_size)
  2. 使用指定挖掘器从子集中挖掘元组
  3. 根据每个元素在元组中出现的频率计算权重
  4. 使用权重作为概率进行随机采样

使用场景

适用于需要重点关注困难样本的场景,可有效提升模型对边界样本的学习能力。

FixedSetOfTriplets:固定三元组采样器

核心思想

创建固定的三元组集合,特别适用于只有三元组作为真实标签的场景。

技术细节

samplers.FixedSetOfTriplets(labels, num_triplets)

参数解析

  • labels:数据集的标签列表
  • num_triplets:要创建的三元组数量

使用场景

当评估算法性能且只有三元组作为真实标签时特别有用。

总结

PyTorch Metric Learning提供的采样器为度量学习任务提供了强大的数据组织能力。选择合适的采样器可以:

  1. 改善模型对类别不平衡的鲁棒性
  2. 更好地捕捉数据中的层次结构
  3. 专注于困难样本的学习
  4. 适应不同的评估场景

开发者应根据具体任务需求和数据特性选择合适的采样策略,以获得最佳的训练效果。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

资源下载链接为: https://pan.quark.cn/s/9e7ef05254f8 在苹果的生态系统中,IAP(应用内购买)是苹果应用商店(App Store)中应用开发者常采用的一种盈利模式,允许用户在应用内直接购买虚拟商品或服务。苹果为开发者提供了一份详细的人民币(CNY)IAP定价表,这份定价表具有以下特点: 价格分级:定价表由多个价格等级组成,开发者可根据虚拟商品的价值选择相应等级,等级越高,价格越高。例如,低等级可能对应基础功能解锁,高等级则对应高级服务或大量虚拟道具。 税收与分成:苹果会从应用内购买金额中抽取30%作为服务费或佣金,这是苹果生态的固定规则。不过,开发者实际到手的收入会因不同国家和地区的税收政策而有所变化,但定价表中的价格等级本身是固定的,便于开发者统一管理。 多级定价策略:通过设置不同价格等级,开发者可以根据商品或服务的类型与价值进行合理定价,以满足不同消费能力的用户需求,从而最大化应用的总收入。例如,一款游戏可以通过设置不同等级的虚拟货币包,吸引不同付费意愿的玩家。 特殊等级:除了标准等级外,定价表还包含备用等级和特殊等级(如备用等级A、备用等级B等),这些等级可能是为应对特殊情况或促销活动而设置的额外价格点,为开发者提供了更灵活的定价选择。 苹果IAP定价表是开发者设计应用内购机制的重要参考。它不仅为开发者提供了标准的收入分成模型,还允许开发者根据产品特性设定价格等级,以适应市场和满足不同用户需求。同时,开发者在使用定价表时,还需严格遵守苹果的《App Store审查指南》,包括30%的分成政策、使用苹果支付接口、提供清晰的产品描述和定价信息等。苹果对应用内交易有严格规定,以确保交易的透明性和安全性。总之,苹果IAP定价表是开发者在应用内购设计中不可或缺的工具,但开发者也需密切关注苹果政策变化,以确保应用的合规运营和收益最大化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郁虹宝Lucille

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值