亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

禁止在 PyTorch 神經網絡的 CrossEntropyLoss 中使用 Softmax

禁止在 PyTorch 神經網絡的 CrossEntropyLoss 中使用 Softmax

慕容708150 2022-06-07 19:57:25
我知道當用作損失函數時,不需要nn.Softmax()在神經網絡的輸出層中使用函數。nn.CrossEntropyLoss但是我需要這樣做,有沒有辦法抑制softmax在我的神經網絡本身的輸出層上的實現nn.CrossEntropyLoss使用?nn.Softmax()動機:我使用shap包來分析之后的特征影響,我只能將我訓練過的模型作為輸入。然而,輸出沒有任何意義,因為我正在查看未綁定的值而不是概率。示例:我想要一個介于 0 和 1 之間的值,而不是 -69.36 作為我模型的一個類的輸出值,所有類的總和為 1。由于之后我無法更改它,因此在訓練期間輸出必須是這樣的。
查看完整描述

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)問題。


查看完整回答
反對 回復 2022-06-07
?
慕慕森

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)


查看完整回答
反對 回復 2022-06-07
  • 2 回答
  • 0 關注
  • 289 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號