DRW的公式推导及代码解析

流程

分阶段指定β值

    # 根据当前epoch计算使用的beta值idx = epoch // 160  # 每160轮epoch切换一次加权系数betas = [0, 0.9999]  # 两个beta值beta = betas[idx]  # 根据idx选择beta值

计算有效样本的权重

对权重进行归一化

(每类权重值 / 权重总和)* 样本数量

    # 将权重进行归一化per_cls_weights = per_cls_weights / np.sum(per_cls_weights) * len(cls_num_list)print(f"Class weights after normalization: {per_cls_weights}")

代码

import numpy as np
import torchdef calculate_per_cls_weights(cls_num_list, epoch, device):# 训练采样器设为空train_sampler = Noneprint(f"Train sampler: {train_sampler}")# 根据当前epoch计算使用的beta值idx = epoch // 160  # 每160轮epoch切换一次加权系数print(f"Epoch: {epoch}, Beta index (idx): {idx}")betas = [0, 0.9999]  # 两个beta值beta = betas[idx]  # 根据idx选择beta值print(f"Selected beta value: {beta}")# 计算每个类别的有效样本数 effective_numeffective_num = 1.0 - np.power(beta, cls_num_list)print(f"Effective number (for each class): {effective_num}")# 计算每个类别的权重 per_cls_weightsper_cls_weights = (1.0 - beta) / effective_numprint(f"Class weights before normalization: {per_cls_weights}")# 将权重进行归一化per_cls_weights = per_cls_weights / np.sum(per_cls_weights) * len(cls_num_list)print(f"Class weights after normalization: {per_cls_weights}")# 将权重转为张量并移动到指定设备上per_cls_weights = torch.FloatTensor(per_cls_weights).to(device)print(f"Final weights as a tensor on device ({device}): {per_cls_weights}")return per_cls_weights# 示例
cls_num_list = [100, 50, 10, 5]  # 假设数据集中有4个类别,样本数分别为100、50、10、5
epoch = 200  # 当前训练轮次
device = 'cuda' if torch.cuda.is_available() else 'cpu'  # 选择设备# 计算类别权重
per_cls_weights = calculate_per_cls_weights(cls_num_list, epoch, device)
print("Per class weights:", per_cls_weights)

解析

前面部分所有类别权重相等。

在你的 Acne04 数据集上,BKD 在第 77 个 epoch 时测试集准确率达到最大值,并且此时并没有使用有效样本的计算,而是直接按照类平衡去计算就取得了最大的效果。出现这种现象的原因可能包括以下几点:

  1. 类平衡策略的优势:BKD 的类平衡蒸馏策略通过对尾部类别施加更高的权重来使得模型在尾部类别上获得更好的表现。即使没有用到有效样本的计算,类平衡蒸馏本身已经纠正了模型对频繁类别的偏向,从而大幅提升了尾部类别的表现。这种简单的类平衡策略可能已经足够有效,以至于能够在较早的 epoch 中达到最佳的分类效果。

  2. 数据集规模和分布的影响:Acne04 数据集的规模较小,类别不平衡的情况可能并没有特别严重,因此即使没有采用更复杂的有效样本计算,类平衡蒸馏就能够取得显著的性能提升。对于这种中等规模或类别分布不那么极端的数据集,较为简单的类平衡方法往往足够有效。

  3. 训练的早期收敛:在第 77 个 epoch 时,模型可能已经充分学习到了数据中的特征,尤其是在使用 BKD 的情况下,模型不仅能够学到头部类别的泛化特征,还能够有效提升尾部类别的表现。这表明 BKD 提供的类平衡机制已经足以解决该数据集上的类不平衡问题,而不需要依赖更复杂的有效样本策略。

  4. 蒸馏温度和超参数的影响:BKD 蒸馏过程中使用的温度参数 TTT 可能在此时已经使得教师模型的软标签足够平滑,进一步帮助学生模型更好地学习尾部类别的特征,而无需通过有效样本策略来调整每类的权重分布。

因此,在 Acne04 数据集上,BKD 的类平衡机制已经足够有效,使得模型在第 77 个 epoch 时就达到了测试集准确率的最大值,即使没有使用更加复杂的有效样本策略​(Balanced Knowledge Dist…)

程度没有那么严重的不平衡数据集,是不是就用类平衡策略就可以了,比其他的平衡策略更好使一点?

是的,对于不平衡程度没有那么严重的数据集,使用类平衡策略(如 BKD 中的类平衡蒸馏)通常已经足够有效,且可能比其他复杂的平衡策略表现得更好。原因如下:

  1. 简单有效:类平衡策略通过调整不同类别的权重,让模型在学习时关注那些少数类。这种方法的简单性意味着它能够快速适应不太严重的类不平衡数据集,而不需要像更复杂的重采样或有效样本计算那样复杂的机制。

  2. 避免过度调整:在不太严重的不平衡数据集中,过度使用复杂的平衡策略(如重采样或有效样本计算)可能会导致对尾部类别的过度关注,反而损害头部类别的表现。类平衡策略通过温和的权重调整,更好地维持了头部和尾部类别之间的平衡,不会过度影响整体模型的泛化能力。

  3. 计算效率:类平衡策略相对简单,计算开销较低,不需要频繁调整采样或计算每个类别的有效样本数,因此训练过程更加高效。对于不太严重的类不平衡问题,这种高效的解决方案通常已经足够有效。

  4. 蒸馏的优势:BKD 的类平衡蒸馏策略在学习时不仅关注少数类,还能通过蒸馏从教师模型中学习整体数据的分布。因此,它能够在提升尾部类别性能的同时保持对头部类别的良好表现,这对于不太严重的不平衡问题尤为重要。

因此,对于不平衡程度较低的数据集,类平衡策略通常能提供足够的性能提升,同时避免了更复杂策略可能带来的负面影响,如过度拟合少数类或损害模型的整体性能​(Balanced Knowledge Dist…)。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s--pod控制器--1

Pod控制器介绍 Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可以将其分为两类: 自主式pod:kubernetes直接创建出来的Pod,这种pod删除后就没有了,也不会重建 控制器创建的pod&#xf…

OpenStack × OceanBase: 打造高可用可扩展的基础设施平台

OceanBase 社区资深总监封仲淹在9月3日参加 OpenInfra 亚洲峰会中,分享了OceanBase与OpenStack的联合解决方案。本文将介绍这一联合方案的技术亮点及其为用户带来的独特价值。 OpenStack长期以来一直是云计算领域的先行者,通过提供强大的开源平台&#x…

前端正确设置资源上下文路径ContextPath(发布目录outDir 、公共基础路径),保证打包部署后站点能正常加载资源。

文章目录 引言I 处理资源上下文路径ContextPathjavascript对象获取上下文路径使用`./` 加载资源文件Vite 的basepublicPath是webpack部署应用包时的基本 URLII 知识扩展:URL的识别2.1 标准的链接格式2.2 URL中的?涵义2.3 URL中的&涵义2.4 传参III #fragment3.1为网页位置…

圆锥曲线练习

设 A ( x 1 , y 1 ) , B ( x 2 , y 2 ) A\left( x_{1}, y_{1} \right), B\left( x_{2}, y_{2} \right) A(x1​,y1​),B(x2​,y2​) l : y k ( x 2 ) l: y k\left( x2 \right) l:yk(x2) 显然 y 0 y0 y0符合题意 当 k ≠ 0 k\neq 0 k0 联立 l l l和 C C C ( k 2 1 2 ) x…

shader 案例学习笔记之偏移

效果 代码 #ifdef GL_ES precision mediump float; #endifuniform vec2 u_resolution; uniform float u_time;vec2 brickTile(vec2 _st, float _zoom){_st * 5.;_st.x step(1., mod(_st.y,2.0)) * 0.5;return fract(_st); }float box(vec2 _st, vec2 _size){_size vec2(0.5)…

【软考中级攻略站】-软件设计师(5)- 软件工程

软件生存周期 什么是软件生存周期? 软件生存周期指的是一个软件从开始构思到最终停止使用(或被替换)的整个过程。就像人的生命一样,软件也有一个从出生到死亡的过程。 软件生存周期的几个阶段 软件生存周期通常可以分为以下几…

DAY13信息打点-Web 应用源码泄漏开源闭源指纹识别GITSVNDS备份

#知识点 0、Web架构资产-平台指纹识别 1、开源-CMS指纹识别源码获取方式 2、闭源-习惯&配置&特性等获取方式 3、闭源-托管资产平台资源搜索监控 演示案例: ➢后端-开源-指纹识别-源码下载 ➢后端-闭源-配置不当-源码泄漏 ➢后端-方向-资源码云-源码泄漏 …

苹果宣布iOS 18正式版9月17日推送:支持27款iPhone升级

9月10日消息,在苹果秋季发布会结束后, 苹果宣布将于9月17日(下周二)推送iOS 18正式版系统。 苹果官网显示,iOS 18正式版将兼容第二代iPhone SE及之后的所有机型,加上刚发布的iPhone 16系列,共兼容27款iPhone。 iOS 18升…

算法学习攻略总结 : 入门至进阶,通关之路指南

❃博主首页 &#xff1a; <码到三十五> ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a; <搬的每块砖&#xff0c;皆为峰峦之基&#xff1b;公众号搜索(码到…

UE中如何制作后处理设置面板

1&#xff09;UE中如何制作后处理设置面板 2&#xff09;Magica Clothes 2插件与Burst编译问题 3&#xff09;UI大小和文本变量 4&#xff09;如何检索直线与网格的所有交点 这是第399篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热门话题&#xff0c;涵盖了UWA问答、社…

机械面试常见问题

文章目录 1.机械设计的一般思路&#xff08;方法&#xff09;2.公差等级有多少种3.机械传动的方式有哪些&#xff1f;选择的时候要考虑哪些问题&#xff1f;1. 齿轮传动2. 带传动3. 链传动4. 摩擦传动5. 螺旋传动6. 液压传动7. 气压传动8. 电磁传动总结 4.什么是宽禁带半导体&a…

4.1 符号定义伪指令

&#x1f393; 微机原理考点专栏&#xff08;通篇免费&#xff09; 欢迎来到我的微机原理专栏&#xff01;我将帮助你在最短时间内掌握微机原理的核心内容&#xff0c;为你的考研或期末考试保驾护航。 为什么选择我的视频&#xff1f; 全程考点讲解&#xff1a;每一节视频都…

【小沐学OpenGL】Ubuntu环境下glew的安装和使用

文章目录 1、简介1.1 OpenGL简介1.2 glew简介 2、安装glew2.1 命令安装glew2.2 直接代码安装glew2.3 cmake代码安装glew 3、测试glew3.1 测试glewfreeglut3.2 测试glewglfw 结语 1、简介 1.1 OpenGL简介 Linux 系统中的 OpenGL 是一个跨语言、跨平台的应用程序编程接口&#…

【C++】STL容器-string的遍历

1.引言 C STL&#xff08;Standard Template Library&#xff09;作为C标准库的核心部分&#xff0c;其重要性不言而喻。它提供了一系列高效、灵活且可复用的数据结构和算法&#xff0c;极大地提升了开发效率&#xff0c;并使得代码更加易于阅读和维护。 在STL中&#xff0c;…

根据NVeloDocx Word模板引擎生成Word(四)

前面介绍了《E6低代码开发平台》的Word模版引擎NVeloDocx&#xff0c;实现了表单的基本字段、子表、单张图片、二维码、条形码怎么基于NVelocity脚本输出到Word文件&#xff0c;都是些比较简单且常用的需求。 本篇介绍怎么基于NVeloDocx在Word中插入图表&#xff0c;目前只支持…

模型训练如何实现自动化输出评估报告、模型、特种平台

模型训练如何实现自动化 1、目标 把对文本分类【体育,教育,娱乐,经济,文学,政治】的模型实现自动化训练。 分类器:贝叶斯、支持向量机、梯度提升、随机森林、逻辑斯蒂回归 通过预设的准确率期望值与训练轮数,获取最优的分类器模型,当模型评估的准确率大于期望值时即…

算法基础-快速幂

(a b) % p (a % p b % p) % p (a - b) % p (a % p - b % p) % p (a * b) % p (a % p * b % p) % p (a ^ b) % p ((a % p)^b) % p 快速幂 3^10 10 1010 2^2 2^3 3^10 3 * 2^2 3 * 2^3 3^4 3^8 a a * a > a a^2 a^4 a^8 所以当 b & 1 1 时&#xff…

建造者模式builder

此篇为学习笔记&#xff0c;原文链接 https://refactoringguru.cn/design-patterns/builder 能够分步骤创建复杂对象。 该模式允许你使用相同的创建代码生成不同类型和形式的对象

2024.9 学习笔记

目录 9.10 1.大地坐标系 2.地球坐标系 3.局部坐标系 4.世界坐标系 5.IMU 6.GPS 9.11 1.SGM算法 步骤 优点与缺点 应用 2.ISP 核心任务 9.12 1.双立方插值 9.10 1.大地坐标系 大地坐标系&#xff08;Geodetic Coordinate System&#xff09;: 定义: 基于地球…

利用数据分析提升SEO排名的7种方法

我们都听过“大数据分析”这个词。科技让我们能够清晰地了解我们的活动和内容的表现——向我们提供了关于受众的宝贵信息&#xff0c;甚至可以精确到他们在Google和其他搜索引擎上使用的具体搜索词。 你已经在你的业务中使用数据分析了吗&#xff1f;如果是&#xff0c;你有利…