【问题标题】:Why does this semantic segmentation network have no softmax classification layer in Pytorch?为什么这个语义分割网络在 Pytorch 中没有 softmax 分类层?
【发布时间】:2019-06-02 15:20:30
【问题描述】:
我正在尝试使用以下 CNN 架构进行语义像素分类。我使用的代码是here
但是,据我了解,这种类型的语义分割网络通常应该有一个 softmax 输出层来产生分类结果。
我在脚本中的任何地方都找不到使用 softmax。 Here 是我正在阅读的关于这种分割架构的论文。从图 2 中,我看到使用了 softmax。因此,我想找出脚本中缺少此内容的原因。欢迎任何见解。
【问题讨论】:
标签:
neural-network
deep-learning
conv-neural-network
pytorch
【解决方案1】:
您正在使用相当复杂的代码来进行训练/推理。但是,如果您稍微挖掘一下,您会发现损失函数是使用here 实现的,并且您的模型实际上是使用cross_entropy 损失来训练的。看文档:
此标准将 log_softmax 和 nll_loss 组合在一个函数中。
为了数值稳定性,最好将softmax“吸收”到损失函数中,而不是由模型显式计算。
这是一种非常常见的做法,让模型输出“原始”预测(又名“logits”),然后让损失(又名标准)在内部进行 softmax。
如果您真的需要概率,您可以在部署模型时在顶部添加一个 softmax。