U-Net语义分割模型最后一层选Softmax还是Sigmoid?原因是什么?
U-Net语义分割最后一层激活函数选择:Sigmoid vs Softmax
核心判断标准是你的分割任务类型,两种激活函数的适用场景和原因完全不同:
Sigmoid激活
- 适用场景:二分类分割(比如前景/背景二选一)、多标签分割(一个像素可能同时属于多个类别,比如医学影像中同一区域存在多种病变)
- 选择原因:Sigmoid会把每个通道的输出压缩到[0,1]区间,每个通道的概率计算完全独立,互不影响。比如二分类时单通道输出,值越接近1越属于目标类别;多标签时每个通道对应一个类别,能独立输出该像素属于对应类别的概率,允许同一像素被标记为多个类别。
- 常用搭配损失:二元交叉熵损失(推荐用
BCEWithLogitsLoss,无需手动加Sigmoid,数值稳定性更好)
Softmax激活
- 适用场景:单标签多分类分割(每个像素只能属于一个类别,比如城市景观分割中的天空、道路、建筑等互斥类别)
- 选择原因:Softmax会对所有通道的输出做归一化处理,让所有类别的概率之和为1,强制每个像素在不同类别中做互斥选择,能直接得到每个像素属于各类别的概率分布,方便后续取最大概率作为类别预测。
- 常用搭配损失:交叉熵损失(推荐用
CrossEntropyLoss,自带Softmax计算,无需手动添加)
额外提醒
- 原始U-Net论文用的是Sigmoid,因为当时针对的是医学影像二分割任务(比如细胞与背景的区分)
- 如果是多标签任务,绝对不能用Softmax——它的归一化特性会压制多个类别同时激活的可能性,导致模型无法正确预测多标签场景
内容的提问来源于stack exchange,提问作者Omar Essam El-Din
相关产品推荐
相关产品推荐

