为什么这个语义分割网络在 Pytorch 中没有 softmax 分类层?



我正在尝试使用以下CNN架构进行语义像素分类。我使用的代码在这里

但是,根据我的理解,这种类型的语义分割网络通常应该有一个softmax输出层来产生分类结果。

我找不到脚本中任何地方使用的softmax。这是我正在阅读的关于这种分段架构的论文。从图 2 中,我看到使用了 softmax。因此,我想找出为什么脚本中缺少此功能。欢迎任何见解。

您正在使用相当复杂的代码来进行训练/推理。但是,如果你稍微挖掘一下,你会发现损失函数是在这里实现的,你的模型实际上是使用cross_entropy损失来训练的。查看文档:

此标准将log_softmax和nll_loss结合在一个函数中。

对于数值稳定性,最好将softmax"吸收"到损失函数中,而不是通过模型显式计算它。
这是一种非常普遍的做法,让模型输出"原始"预测(又名"logits"),然后让损失(又名标准)在内部执行 softmax。如果您确实需要概率,您可以在部署模型时在顶部添加 softmax。

最新更新