长尾问题之LDAM

news2024/11/23 20:04:40

做法&代码&公式

step1: 全连接层的权重W和特征向量X都归一化,相乘 W * X = P (得到各个类别的概率)
# 定义权重,初始化
weight = nn.Parameter(torch.FloatTensor(num_classes, num_features))
weight.data.uniform_(-1, 1).renorm_(2, 1, 1e-5).mul_(1e5)

# 归一化W,X ; W * X =  P
Z = F.linear(F.normalize(x), F.normalize(self.weight))

step2: 损失参数计算及设置

计算 margin

其中nj是对应类别j的数量,C是一个超参常数。代码里C是最多样本类别的0.5倍

\gamma_j =\frac{C}{n_j^{\frac{1}{4}}}

以此类推,类别1,类别2 的分别margin

\gamma_1 =\frac{C}{n_1^{\frac{1}{4}}},\gamma_2 =\frac{C}{n_2^{\frac{1}{4}}}

代码部分

s = 30 # 设置缩放系数 s=30 
num_class_list=[13000,450,4231,8000 ... ]  # 各个类别样本数量

max_m = 0.5  
m_list = 1.0 / np.sqrt(np.sqrt(num_class_list))
m_list = m_list * (max_m / np.max(m_list)) # ignore是0影响计算

re-weight

epoch∈(0~160)时为

betas = [0, 0.9999]
re_weights = (1.0 - betas[0]) / (1.0 - np.power(betas[0], num_class_list))
re_weights = re_weights / np.sum(per_cls_weights) * num_class)

epoch∈(160~maxepoch)时为:

betas = [0, 0.9999]
re_weights = (1.0 - betas[1]) / (1.0 - np.power(betas[1], num_class_list))
re_weights = re_weights / np.sum(re_weights) * num_class)

step4:计算损失

# index: 哪些位置是y_true
x_m = Z - m_list
outputs = torch.where(index, x_m, Z)
F.cross_entropy(s * outputs, targets, weight=re_weight)

参考:https://github.com/zhangyongshun/BagofTricks-LT/blob/main/documents/trick_gallery.md

MMPretrain实现 不要积分的,免费的

https://download.csdn.net/download/magic_shuang/88632302

mmpretrain/models/heads/ldam_head.py

mmpretrain/models/losses/ldam_loss.py

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初识迭代器(Iterator)——迭代器模式——迭代加深(后续更新...)

学习网页: Welcome to Python.orghttps://www.python.org/ 迭代器(Iterator) 迭代器是一个非常有用的Python特性,它允许我们遍历一个容器(如列表、元组、字典、集合等)的元素。迭代器提供了一种方法&…

02什么是CPU上下文切换

上⼀节, 讲了要怎么理解平均负载( Load Average) , 并⽤三个案例展示了不同场景下平均负载升⾼的分析⽅法。 这其中, 多个进程竞争 CPU 就是⼀个经常被我们忽视的问题。 1、CPU上下文切换的概念 我想你⼀定很好奇&am…

软件开发人员,参加各种行业技术大会有意义么?

参加行业技术大会对于软件开发人员来说,是一个获取新知识、拓展视野、结交同行的宝贵机会。 1、知识更新:技术大会通常涵盖最新的技术趋势和工具。对于软件开发人员来说,这是了解新技术并将其应用到日常工作中的好机会。 2、拓宽视野&#x…

遥测终端机RTU如何选型和配置?

随着物联网技术的不断发展,遥测终端机RTU在各个领域的应用越来越广泛。RTU作为数据采集、传输和处理的核心设备,对于确保数据的准确性和稳定性至关重要。那么,如何选型与配置遥测终端机RTU呢?本文将为您揭秘RTU的选型与配置技巧&a…

【ros2 control 机器人驱动开发】简单双关节机器人学习-example 1

【ros2 control 机器人驱动开发】简单双关节机器人学习-example 1 文章目录 前言一、RR机器人创建description pkg创建demos pkg 二、创建controller相关创建example pkg 三、测试运行总结 前言 本系列文件主要有以下目标和内容: 为系统、传感器和执行器创建 Har…

HTML中边框样式、内外边距、盒子模型尺寸计算(附代码图文示例)【详解】

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍HTML中边框样式、内外边距、盒子模型尺寸计算以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学习记录获,友友们有任何问…

简单描述从输入网址到页面显示的过程

当用户输入网址并按下回车键后,浏览器会进行以下步骤: DNS 解析:浏览器会解析网址中的域名部分,提取出需要访问的目标域名。然后,它会向本地 DNS 服务器发送一个 DNS 查询请求,以获取该域名对应的 IP 地址。…

Trie 字典树(c++)(前缀)

题目链接:用户登录 题目: 样例: 输入 5 3 aaa aba aabbaa abbbbb cdd aabba abc abab 输出 Y N N 思路: 根据题目意思,要用到 Trie 字典树算法。 Trie 字典树,顾名思义,“字典”&#xff0…

竞赛保研 wifi指纹室内定位系统

简介 今天来介绍一下室内定位相关的原理以及实现方法; WIFI全称WirelessFidelity,在中文里又称作“行动热点”,是Wi-Fi联盟制造商的商标做为产品的品牌认证,是一个创建于IEEE 802.11标准的无线局域网技术。基于两套系统的密切相关&#xff…

大四复习:深入浅出解释拓扑排序

我在大二学习拓扑排序的时候,不是很明白,现在已经大四,抽时间复习一下拓扑排序。 什么是拓扑排序? 如何实现拓扑排序? 拓扑排序的拓展 什么是拓扑排序? 首先拓扑排序的定义如下: 拓扑排序是一…

【C语言】SCU安全项目1-FindKeys

目录 前言 命令行参数 16进制转字符串 extract_message1 process_keys12 extract_message2 main process_keys34 前言 因为这个学期基本都在搞CTF的web方向,C语言不免荒废。所幸还会一点指针相关的知识,故第一个安全项目做的挺顺利的&#xff0c…

龙芯loongarch64服务器编译安装gcc-8.3.0

前言 当前电脑的gcc版本为8.3.0,但是在编译其他依赖包的时候,出现各种奇怪的问题,会莫名其妙的中断编译。本地文章讲解如何自编译安装gcc,替换系统自带的gcc。 环境准备 下载页面:龙芯开源社区网站 - LoongArch GCC 8.3 交叉工具链 - 源码下载源码包名称如:loongson-gnu…

修改antd表单Form.Item的label颜色的方法

默认的Form.item的标签颜色为黑色,但是如果我是用深色背景,这样的情况下表单就看不清楚label了,就像下面的情况,密码两个字完全看不到,所以想把它改为白色字体,就像上面的账号两个字一样: 所以怎…

黑马点评05分布式锁 1互斥锁和过期时间

实战篇-09.分布式锁-基本原理和不同实现方式对比_哔哩哔哩_bilibili 1.分布式锁 因为jvm内部的sychonized锁无法在不同jvm之间共享锁监视器,所以需要一个jvm外部的锁来共享。 2.redis setnx互斥锁 加锁解锁即可 2.1不释放锁可能死锁 redis 的setnx不会自动释放锁…

C语言是否已经跟不上社会需求?

今日话题。C语言是否已经跟不上社会需求?一个问题的提出者说,几天前他受到老板的批评,因为他只精通C语言编程,无法满足老板的需求。实际上,C语言在嵌入式行业中仍然具有极高的价值。它高效、可移植,并广泛用…

选择正确的自动化测试工具:打造高效测试流程的必备利器!

摘要 自动化测试正在逐步取代部分手动测试,因为它可以节省时间并提高测试质量。特别是在进行回归测试的情况下,自动化可以通过多种方式提高效率。手动进行重复测试是浪费时间和资源。此外,由于重复测试可能会遗漏,因此存在一定的…

Android Stuido报错处理

仅用作报错记录。防止以后出项问题不知如何解决。 报错1 Dependency‘androidx.annotation:xx requires libraries and applications … 需要修改CompileSDKVersion更改为报错中提示的版本 打开项目build.gradle文件,将compileSdk和targetSdk修改为报错中提示的版…

从数藏到链游,最近爆火的链游理想城,一天直接干爆服务器!

大家好,我是吴军,一家软件开发公司的营销经理 今天我们来聊聊链游以及数字藏品,2022年4月开始,一众数藏平台犹如雨后春笋冒出来,由ibox牵头,开始了一场掘金盛宴,许多大学生都相继入场&#xff…

【1.7计算机组成与体系结构】主存编址计算

目录 1.主存编址2.主存编址计算公式3.例题: 1.主存编址 1bit(比特位) 1B(字节)8bit(比特位) 1KB1024B 1MB1024KB 1GB1024MB 2.主存编址计算公式 🔴存储单元 存储单元个数最大地址-最小地址1 🔴编址内容 按字编址:存储体的存储单元是字存储…