延迟重平衡优化(Deferred Re-balancing Optimization Schedule)

部署运行你感兴趣的模型镜像

DRW

论文代码

        elif args.train_rule == 'DRW':
            train_sampler = None
            idx = epoch // 160
            betas = [0, 0.9999]
            effective_num = 1.0 - np.power(betas[idx], cls_num_list)
            print(f"\neffective_num:{effective_num}")
            per_cls_weights = (1.0 - betas[idx]) / np.array(effective_num)
            per_cls_weights = per_cls_weights / np.sum(per_cls_weights) * len(cls_num_list)
            per_cls_weights = torch.FloatTensor(per_cls_weights).to(args.device)
            print(f"\nper_cls_weights:{per_cls_weights}")

160epoch之前,每一类的权重是1;

160epoch之后,每一类的权重经过带β公式计算的,更偏重与少数类的样本。

案例代码

import numpy as np
import torch

# 模拟的类别样本数量
cls_num_list = np.array([5, 50, 100])

# Beta值用于不同训练阶段
betas = [0, 0.9999]

# 总训练轮次
total_epochs = 3

# 模拟训练过程
for epoch in range(total_epochs):
    # 根据当前训练轮次计算索引
    idx = epoch // 2  # 分割成两个阶段
    current_beta = betas[idx]
    
    # 计算有效样本数
    effective_num = 1.0 - np.power(current_beta, cls_num_list)
    # 计算每类的权重
    per_cls_weights = (1.0 - current_beta) / effective_num
    per_cls_weights = per_cls_weights / np.sum(per_cls_weights) * len(cls_num_list)
    
    # 转为Tensor
    per_cls_weights_tensor = torch.FloatTensor(per_cls_weights)
    
    # 输出当前轮次和对应的类别权重
    print(f"Epoch {epoch + 1}:")
    print(f"effective_num:{effective_num}")
    print(f"  Beta value: {current_beta:.4f}")
    print(f"  Class weights: {per_cls_weights_tensor}")

 

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值