1. 程式人生 > >pytorch中required_grad和detach的澄清

pytorch中required_grad和detach的澄清

最近和別人討論,發現了自己以前的認識錯誤的地方。

程式碼中的detach和required_grad的引入是減少了計算量,required_grad=false會計算誤差,不計算wb的梯度(原因在於一個網路如果是ABC層這樣的連線方式,B不求梯度,但是A還是會獲得梯度,這就需要計算B的誤差,從而傳播到A,而計算B中引數的梯度就沒有必要了),而detach會切斷反向傳播,不計算誤差也不計算梯度。之所以之前會認為加不加required_grad=false和detach不影響效果,是因為只看到了輸出結果的不變,沒有意識到計算時間和空間需求的變化,而這兩點的確是不那麼容易監測出來的。另一方面是對反向傳播演算法的不熟練。以後下結論不能那麼武斷了,做實驗也要學會控制變數和觀察實驗結果。的確寫程式碼應該追求簡潔,不寫冗餘的程式碼。這就需要分清冗餘與否。

以上認識也可能和

這就印證了認識真理的反覆性、前進性和上升性。