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如何通过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

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

Redis过期键删除策略解读

《Redis过期键删除策略解读》Redis通过惰性删除策略和定期删除策略来管理过期键,惰性删除策略在键被访问时检查是否过期并删除,节省CPU开销但可能导致过期键滞留,定期删除策略定期扫描并删除过期键,... 目录1.Redis使用两种不同的策略来删除过期键,分别是惰性删除策略和定期删除策略1.1惰性删除策略

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

缓存策略使用总结

缓存是提高系统性能的最简单方法之一。相对而言,数据库(or NoSQL数据库)的速度比较慢,而速度却又是致胜的关键。 如果使用得当,缓存可以减少相应时间、减少数据库负载以及节省成本。本文罗列了几种缓存策略,选择正确的一种会有很大的不同。缓存策略取决于数据和数据访问模式。换句话说,数据是如何写和读的。例如: 系统是写多读少的吗?(例如基于时间的日志)数据是否是只写入一次并被读取多次?(例如用户配