2 回答

TA貢獻1821條經驗 獲得超5個贊
nn.CrossEntropyLoss的文檔說,
該標準將nn.LogSoftmax()和nn.NLLLoss()組合在一個類中。
我建議你堅持使用CrossEntropyLoss
作為損失標準。但是,您可以使用softmax函數將模型的輸出轉換為概率值。
請注意,您始終可以使用模型的輸出值,無需為此更改損失標準。
但是如果你仍然想Softmax()
在你的網絡中使用,那么你可以使用NLLLoss()
作為損失標準,只在將模型的輸出提供給標準函數之前應用log() 。同樣,如果您LogSoftmax
在網絡中使用,則可以應用exp()來獲取概率值。
更新:
要log()
在Softmax
輸出上使用,請執行以下操作:
torch.log(prob_scores + 1e-20)
通過向 中添加一個非常小的數字 (1e-20) prob_scores
,我們可以避免該log(0)
問題。

TA貢獻1856條經驗 獲得超17個贊
您可以使用nn.NLLLoss(). nn.CrossEntropyLoss計算輸入分數的 log softmax 并計算負對數似然損失。如果您已經有日志概率,則可以使用nn.NLLLoss().
這是 PyTorchs 文檔中的一個示例
m = nn.LogSoftmax(dim=1)
loss = nn.NLLLoss()
input = torch.randn(3, 5, requires_grad=True)
target = torch.tensor([1, 0, 4])
output = loss(m(input), target)
添加回答
舉報