gpt4 book ai didi

python - 禁止在 PyTorch 神经网络的 CrossEntropyLoss 中使用 Softmax

转载 作者:太空宇宙 更新时间:2023-11-04 07:26:43 25 4
gpt4 key购买 nike

我知道当使用 nn.CrossEntropyLoss 作为损失函数时,不需要在神经网络的输出层使用 nn.Softmax() 函数。

但是我需要这样做,有没有办法抑制 nn.CrossEntropyLoss 中 softmax 的实现使用,而是在我的输出中使用 nn.Softmax()神经网络本身的层?

动机:我正在使用 shap 包来分析之后的特征影响,我只能将训练好的模型作为输入。然而,输出没有任何意义,因为我正在查看未绑定(bind)的值而不是概率。

示例:我想要的不是 -69.36 作为我模型的一个类的输出值,而是介于 0 和 1 之间的值,所有类的总和为 1。由于我之后无法更改它,因此在训练期间输出需要已经像这样。

enter image description here

最佳答案

nn.CrossEntropyLoss 的文档说,

This criterion combines nn.LogSoftmax() and nn.NLLLoss() in one single class.

我建议您坚持使用 CrossEntropyLoss 作为损失标准。但是,您可以使用 softmax 将模型的输出转换为概率值。功能。

请注意,您始终可以使用模型的输出值,不需要为此更改损失标准。

但是如果你仍然想在你的网络中使用Softmax(),那么你可以使用NLLLoss()作为损失准则,只应用log()在将模型的输出提供给准则函数之前。同样,如果您在网络中使用 LogSoftmax,则可以应用 exp()获取概率值。

更新:

要在 Softmax 输出上使用 log(),请执行以下操作:

torch.log(prob_scores + 1e-20)

通过向 prob_scores 添加一个非常小的数字 (1e-20),我们可以避免 log(0) 问题。

关于python - 禁止在 PyTorch 神经网络的 CrossEntropyLoss 中使用 Softmax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58122505/

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