為什么需要每次計算梯度都要清空
待辦
根據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