为什么在 Pytorch 的神经网络训练和验证中使用不同的 Softmax 变体?

数据挖掘 神经网络 深度学习 火炬 软最大
2022-03-08 20:54:19

具体来说,我正在做一个建模项目,我看到别人的代码看起来像

def forward(self, x):
    x = self.fc1(x)
    x = self.activation1(x)
    x = self.fc2(x)
    x = self.activation2(x)
    x = self.fc3(x)
    x = self.activation3(x)
    # use log softmax + NLLLoss in training; softmax to make predictions
    if self.training:
        x = self.log_softmax(x)
    else:
        x = self.softmax(x)
    return x

对于上下文,这是使用 PyTorch,它涉及分类问题。标准是 NLLLoss。log_softmax 用于训练但softmax用于实际预测的原因是什么?

1个回答

它更像是一个 pytorch 实现的东西。log_softmax() 输出原始 logits,并在训练中将它们传递给 NLL Loss。在推理过程中,您只需要概率,所以 softmax 就足够了。

您没有使用不同的算法进行训练和测试,正如目前所说,这个问题非常具有误导性。您正在使用相同算法的不同实现。

您可以在此处找到有关此问题的更多信息:

PS:我记得在 Udacity 奖学金上遇到过同样的问题。如果您正在阅读他们其中一门课程的代码,则可能有关于解决方案 jupyter 的解释。