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