解决样本不平衡问题

参考:https://www.zhihu.com/question/56662976
三个维度考虑

一.数据方面

1.1、修改数据采样比例
训练过程中调节采样比例,具体方法参考:https://blog.csdn.net/ittongyuan/article/details/131088803
关键代码:

from torch.utils.data import DataLoader
from torch.utils.data.sampler import WeightedRandomSampler

# 自定义的dataset,前10000个是dog,然后是1000个cat,共11000个数据。
train_dataset   = DataGenerator(train_imgs, input_shape=input_shape, train=True)
# 每个类别的样本数量
num_dog   	    = 10000
num_cat         = 1000
# weight列表
train_weights   = []
train_weights.extend([1/num_dog]*num_dog) # 扩展10000个0.0001,前10000个样本的采样权重,狗多权重小
train_weights.extend([1/num_cat]*num_cat)  # 扩展1000个0.001,后1000个样本的采样权重,猫少权重大
print(train_weights) # 可以打印看看,总共11000个数,前10000个是0.0001,然后是1000个0.001
# 创建WeightedRandomSampler,1600为采样数
train_sampler   = WeightedRandomSampler(train_weights, 1600, replacement=False)
# 将sampler传给Dataloader,不再需要shuffle
gen             = DataLoader(train_dataset, batch_size=128, sampler=train_sampler, num_workers=8)

1.2、进行数据增强
几何操作、颜色变换、随机擦除、添加噪声等方法
参考其他人的结论
“过采样和分配权重哪个效果好?
answer1:之前在一些小数据集上做过测试,过采样的效果要好于分配权重
answer2:是哈,海康也是用的采样,估计是测试过了的。

二.loss层面

为不同的分类错误给予不同惩罚力度(权重),在调节类别平衡的同时,也不会增加计算复杂度。
2.1OHEM 和 Focal Loss
2.2BCEloss中的参数:https://zhuanlan.zhihu.com/p/509901427

loss_fn = torch.nn.BCEWithLogitsLoss(weight=None, reduction='mean', pos_weight=None)
loss = loss_fn(logits, y_true)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值