在训练集中类别不平衡的情况下,可对不同类别赋予不同的权重。有采用固定权重,也有实时计算权重。

在这里,介绍一种自适应权重的计算方法,参考论文《ENet: A Deep Neural Network Architecture for Real-time Semantic Segmentation》。

对类别的权重定义如下:

w_{class} = \frac{1}{ln(c + p_{class})}

其中,c是一个超参数,设为1.02,p_{class}是该类样本所占的比例。最后,将w_{class}限制在[1.0,50]的范围内。

本人实验中,在类别不平衡的情况下(达到了30:1),在一个batch内,采用上述公式计算类别权重,与固定权重相比,最终的F1从百分之九十五点几上升到百分之九十六点几。

用pytorch接口

loss = F.cross_entropy(logits,gt,weight=weight)

其中,weight为上述公式计算出来的权重。

(PS:以此记录,便于查阅)

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐