在训练集中类别不平衡的情况下,可对不同类别赋予不同的权重。有采用固定权重,也有实时计算权重。
在这里,介绍一种自适应权重的计算方法,参考论文《ENet: A Deep Neural Network Architecture for Real-time Semantic Segmentation》。
对类别的权重定义如下:
其中,c是一个超参数,设为1.02,是该类样本所占的比例。最后,将
限制在[1.0,50]的范围内。
本人实验中,在类别不平衡的情况下(达到了30:1),在一个batch内,采用上述公式计算类别权重,与固定权重相比,最终的F1从百分之九十五点几上升到百分之九十六点几。
用pytorch接口
loss = F.cross_entropy(logits,gt,weight=weight)
其中,weight为上述公式计算出来的权重。
(PS:以此记录,便于查阅)