gpt4 book ai didi

PyTorch LogSoftmax 与 Softmax 的 CrossEntropyLoss

转载 作者:行者123 更新时间:2023-12-03 20:24:00 35 4
gpt4 key购买 nike

我知道 PyTorch 的 LogSoftmax 函数基本上只是一种在数值上更稳定的计算方式 Log(Softmax(x)) . Softmax 可让您将线性层的输出转换为分类概率分布。
pytorch documentation说 CrossEntropyLoss 结合了 nn.LogSoftmax()nn.NLLLoss()在一个类(class)。
看着 NLLLoss ,我还是一头雾水……是不是用了2个log?我认为负日志是事件的信息内容。 (如 entropy )
多看了几眼,我觉得NLLLoss假设您实际上传递的是对数概率,而不仅仅是概率。这样对吗?如果是这样,这有点奇怪......

最佳答案

是的,NLLLoss以对数概率 ( log(softmax(x)) ) 作为输入。为什么?。因为如果你添加一个 nn.LogSoftmax (或 F.log_softmax )作为模型输出的最后一层,您可以使用 torch.exp(output) 轻松获得概率,为了得到交叉熵损失,可以直接使用nn.NLLLoss .当然,如你所说,log-softmax 更稳定。
而且,只有一个日志(它在 nn.LogSoftmax 中)。没有登录nn.NLLLoss .nn.CrossEntropyLoss()结合 nn.LogSoftmax() ( log(softmax(x)) ) 和 nn.NLLLoss()在一个类(class)。因此,传递到 nn.CrossEntropyLoss 的网络输出需要是网络的原始输出(称为 logits),而不是 softmax 函数的输出。

关于PyTorch LogSoftmax 与 Softmax 的 CrossEntropyLoss,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65192475/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com