為什么需要每次計算梯度都要清空


為什么需要每次計算梯度都要清空

待辦

根據pytorch中的backward()函數的計算,當網絡參量進行反饋時,梯度是被積累的而不是被替換掉;但是在每一個batch時毫無疑問並不需要將兩個batch的梯度混合起來累積,因此這里就需要每個batch設置一遍zero_grad 了。

其實這里還可以補充的一點是,如果不是每一個batch就清除掉原有的梯度,而是比如說兩個batch再清除掉梯度,這是一種變相提高batch_size的方法,對於計算機硬件不行,但是batch_size可能需要設高的領域比較適合,比如目標檢測模型的訓練。

關於這一點可以參考:https://discuss.pytorch.org/t/why-do-we-need-to-set-the-gradients-manually-to-zero-in-pytorch/4903/3

關於backward()的計算可以參考:https://discuss.pytorch.org/t/how-to-use-the-backward-functions-for-multiple-losses/1826/5

————————————————
版權聲明:本文為CSDN博主「xiaoxifei」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/xiaoxifei/article/details/83474724


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM