pytorch輔助損失函式反向傳播的疑問

時間 2021-06-06 09:42:21

1樓:範汝超

這算是乙個多工吧,一般情況下會設定兩個loss的比例,作為乙個超引數進行調整。按問題中直接相加就相當於1:1。

拋開這個不說,如果操作得當,相加再計算梯度和分別算基本相同。為什麼說操作得當呢,因為pytorch裡面的.backward()缺省會釋放動態圖,如果你的兩個loss前向計算的動態圖裡面有重疊的部分,第乙個loss的梯度計算就會釋放重疊部分的動態圖,第二個loss計算梯度的時候對於重疊部分就沒有梯度了,造成重疊部分梯度更新不充分,運氣好的話依然會收斂,但是你完全不會注意到這個小錯誤。

而操作得當就是.backward的時候保留動態圖,同時梯度更新只進行一步。

所以,遇到這種情況直接按比例相加,再計算梯度準沒錯,不要搞那麼多花裡胡哨的東西。

2樓:未一

loss是目標函式, 優化問題求的就是目標函式的極值, 問題的數學模型就要求只有乙個優化目標

如果兩個loss分別訓練, 就是給問題兩個優化目標, 如果兩個loss的優化方向有差別, 可能導致優化結果波動, 或者出一些奇怪的問題.

pytorch 發現反向函式中的grad variables引數是什麼意思?

蕊寒香冷蝶難來 如果反向傳播的張量y是非標量的話,該項引數需要設定乙個與y的shape相同的初值,一般可以直接設定為y.backward torch.ones y.shape 其實如果再令z y.sum 再直接用z.backward 也是一樣的效果。 學到這裡我也很疑惑,於是剛寫了一篇文章 PyTo...

Pytorch如何自定義損失函式(Loss Function)?

vector的回答已經比較詳細地介紹了自己寫pytorch 裡loss function 的方法。但是在你自己去定義loss function前需要明白pytorch的自動求導機制,從而避免很多問題。1.你想用的loss function究竟能不能作為loss function來監督學習。很多時候我...

為什麼優化損失函式的上界可以優化損失函式?

DomainAdaptation 題主所說的應該是非凸的0 1損失函式和相應的替代損失函式吧。在非代價敏感的分類的問題中,我們最容易想到就是用0 1損失函式來度量錯分樣本的損失。但由於0 1損失非凸,不好優化,於是人們採用了一系列的替代損失函式 surragate loss function 來替代...