loss_func = nn.MSELoss() loss = loss_func(val, target)
最近在跑一個項目,計算loss
時用了很普通的MSE
,在訓練了10到300個batch時,會出現loss tensor([[nan nan nan nan]]
相似的狀況。對這個異常的loss
進行梯度降低,會致使net
的輸出變爲nan
。在網上查瞭解決方案,都很差用:python
loss
太小(或者說除以了0 / 計算了 log(0)
);NaN
。試過上述方法,卻一樣無效的小夥伴能夠考慮:web
loss function
,在臨界值處改成線性函數,知乎連接:【PyTorch】梯度爆炸、loss在反向傳播變爲nan;這裏我觀察了臨界值,打了90分鐘的print
,發現個人問題出在target
上。svg
個人 target 計算公式,可能會獲得 inf 的結果,致使沒法正常的梯度降低。能夠考慮:函數
target
是否正確;target
後,將其改成本身須要的值,以下。target[target == float("Inf")] = 0
但請注意該方法在數學上的可行性。學習