Influence-Balanced Loss 中的Resample策略

2024-05-14 13:28

本文主要是介绍Influence-Balanced Loss 中的Resample策略,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 改进的sampler策略

    elif args.train_rule == 'Resample':train_sampler = ImbalancedDatasetSampler(dset_train)
class ImbalancedDatasetSampler(torch.utils.data.sampler.Sampler):def __init__(self, dataset, indices=None, num_samples=None):# if indices is not provided, # all elements in the dataset will be consideredself.indices = list(range(len(dataset))) \if indices is None else indices# if num_samples is not provided, # draw `len(indices)` samples in each iterationself.num_samples = len(self.indices) \if num_samples is None else num_samples # 数据集样本个数# distribution of classes in the dataset label_to_count = [0] * len(np.unique(dataset.targets))for idx in self.indices:label = self._get_label(dataset, idx)label_to_count[label] += 1beta = 0.9999effective_num = 1.0 - np.power(beta, label_to_count)per_cls_weights = (1.0 - beta) / np.array(effective_num) #各类别的权重 per_cls_weights: [0.00248924 0.00202661 0.00689909 0.00975834]# weight for each sampleweights = [per_cls_weights[self._get_label(dataset, idx)]for idx in self.indices] # 各样本的权重self.weights = torch.DoubleTensor(weights)def _get_label(self, dataset, idx):return dataset.targets[idx]def __iter__(self):return iter(torch.multinomial(self.weights, self.num_samples, replacement=True).tolist())def __len__(self):return self.num_samples

Class Counts: [410, 506, 146, 103]
per_cls_weights: [0.00248924 0.00202661 0.00689909 0.00975834]

0.00248924*410+0.00202661*506+0.00689909*146+103*0.00975834=4.05842922

普通sampler

继承了sampler类,然后重新为数据集中的各样本分配权重。

如果使用的是普通的采样器(sampler),例如 PyTorch 中的 RandomSampler 或简单的顺序采样,每个样本通常被赋予等权重。这意味着在抽样过程中,每个样本被选中的概率是相等的。

在这种情况下,假设数据集中有 𝑁个样本,那么每个样本被选中的概率和权重都是 1/𝑁​。这种方式不考虑数据集中可能存在的类别不平衡问题,每个样本被选取的机会完全相同。

例如,如果你有一个包含 100 个样本的数据集,并使用普通的采样器进行随机抽样,则每个样本被选中的概率都是 1%。这种采样方式简单且常用,但在处理类别极度不平衡的数据集时可能不够有效,因为它可能导致模型对多数类过拟合,而忽视了少数类。

ImbalancedDatasetSampler的采样策略的公式和CBReweight的公式差不多

两者都试图通过为每个类别的样本分配不同的权重来解决类别不平衡问题,但应用的场景和具体实现有所不同:

  • ImbalancedDatasetSampler:影响的是数据采样过程,通过改变数据输入模型的方式来达成类别平衡。
  • CBReweight:直接作用于模型的损失函数,通过改变损失计算方式来强调少数类的重要性。

尽管两者策略相似,但具体实现和影响的环节(数据层面 vs. 模型训练层面)有所区别。

ImbalancedDatasetSampler最后会将整个数据集的每个样本的权重列表送入官方写好的sampler里(继承普通的sampler类),CBReweight会将每个类的权重列表送入官方写好的代码里(交叉熵损失)

这篇关于Influence-Balanced Loss 中的Resample策略的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/988859

相关文章

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

redis过期key的删除策略介绍

《redis过期key的删除策略介绍》:本文主要介绍redis过期key的删除策略,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录第一种策略:被动删除第二种策略:定期删除第三种策略:强制删除关于big key的清理UNLINK命令FLUSHALL/FLUSHDB命

SpringRetry重试机制之@Retryable注解与重试策略详解

《SpringRetry重试机制之@Retryable注解与重试策略详解》本文将详细介绍SpringRetry的重试机制,特别是@Retryable注解的使用及各种重试策略的配置,帮助开发者构建更加健... 目录引言一、SpringRetry基础知识二、启用SpringRetry三、@Retryable注解

MySQL 分区与分库分表策略应用小结

《MySQL分区与分库分表策略应用小结》在大数据量、复杂查询和高并发的应用场景下,单一数据库往往难以满足性能和扩展性的要求,本文将详细介绍这两种策略的基本概念、实现方法及优缺点,并通过实际案例展示如... 目录mysql 分区与分库分表策略1. 数据库水平拆分的背景2. MySQL 分区策略2.1 分区概念

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

Deepseek使用指南与提问优化策略方式

《Deepseek使用指南与提问优化策略方式》本文介绍了DeepSeek语义搜索引擎的核心功能、集成方法及优化提问策略,通过自然语言处理和机器学习提供精准搜索结果,适用于智能客服、知识库检索等领域... 目录序言1. DeepSeek 概述2. DeepSeek 的集成与使用2.1 DeepSeek API

Redis的数据过期策略和数据淘汰策略

《Redis的数据过期策略和数据淘汰策略》本文主要介绍了Redis的数据过期策略和数据淘汰策略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录一、数据过期策略1、惰性删除2、定期删除二、数据淘汰策略1、数据淘汰策略概念2、8种数据淘汰策略

SpringBoot中的404错误:原因、影响及解决策略

《SpringBoot中的404错误:原因、影响及解决策略》本文详细介绍了SpringBoot中404错误的出现原因、影响以及处理策略,404错误常见于URL路径错误、控制器配置问题、静态资源配置错误... 目录Spring Boot中的404错误:原因、影响及处理策略404错误的出现原因1. URL路径错

Redis多种内存淘汰策略及配置技巧分享

《Redis多种内存淘汰策略及配置技巧分享》本文介绍了Redis内存满时的淘汰机制,包括内存淘汰机制的概念,Redis提供的8种淘汰策略(如noeviction、volatile-lru等)及其适用场... 目录前言一、什么是 Redis 的内存淘汰机制?二、Redis 内存淘汰策略1. pythonnoe