Pytorch Pyrotch LogSoftmax与Softmax,用于无交叉点

Pytorch Pyrotch LogSoftmax与Softmax,用于无交叉点,pytorch,cross-entropy,Pytorch,Cross Entropy,我知道PyTorch的LogSoftmax函数基本上只是一种更稳定的数值计算方法,可以计算Log(Softmax(x))。Softmax允许您将线性层的输出转换为分类概率分布 表示CrossEntropyLoss将nn.LogSoftmax()和nn.NLLLoss()组合在一个类中 看着NLLLoss,我仍然很困惑……是否有两个日志被使用?我认为负面日志是事件的信息内容。(如中所示) 再看一看,我认为NLLLoss假设您实际上传递的是日志概率,而不仅仅是概率。这是正确的吗?如果是这样,那就有点

我知道PyTorch的LogSoftmax函数基本上只是一种更稳定的数值计算方法,可以计算
Log(Softmax(x))
。Softmax允许您将线性层的输出转换为分类概率分布

表示CrossEntropyLoss将
nn.LogSoftmax()
nn.NLLLoss()
组合在一个类中

看着
NLLLoss
,我仍然很困惑……是否有两个日志被使用?我认为负面日志是事件的信息内容。(如中所示)


再看一看,我认为
NLLLoss
假设您实际上传递的是日志概率,而不仅仅是概率。这是正确的吗?如果是这样,那就有点奇怪了……

是的,
NLLLoss
将日志概率(
log(softmax(x))
)作为输入。为什么?因为如果您添加一个
nn.LogSoftmax
(或
F.log\u softmax
)作为模型输出的最后一层,您可以使用
torch.exp(output)
轻松获得概率,为了获得交叉熵损失,您可以直接使用
nn.nlloss
。当然,正如您所说,log softmax更稳定

而且,只有一个日志(它位于
nn.LogSoftmax
)。没有登录
nn.NLLLoss


nn.CrossEntropyLoss()
nn.LogSoftmax()
log(softmax(x))
)和
nn.NLLLoss()
组合在一个类中。因此,传递到
nn.CrossEntropyLoss
的网络输出需要是网络的原始输出(称为logits),而不是softmax函数的输出。

如果网络在训练期间为交叉熵损失提供原始输出,我是否需要在推断期间添加LogSoftMax层?