1. 程式人生 > >volatile 和 requires_grad在pytorch中的意思

volatile 和 requires_grad在pytorch中的意思

Backward過程中排除子圖

pytorchBP過程是由一個函式決定的,loss.backward(), 可以看到backward()函式裡並沒有傳要求誰的梯度。那麼我們可以大膽猜測,在BP的過程中,pytorch是將所有影響lossVariable都求了一次梯度。但是有時候,我們並不想求所有Variable的梯度。那就要考慮如何在Backward過程中排除子圖(ie.排除沒必要的梯度計算)。 

如何BP過程中排除子圖? Variable的兩個引數(requires_gradvolatile

requires_grad=True   要求梯度

requires_grad=False   不要求梯度


volatile=True相當於requires_grad=False。反之則反之。。。。。。。ok

注意:如果a是requires_grad=True,b是requires_grad=False。則c=a+b是requires_grad=True。同樣的道理應用於volatile

為什麼要排除子圖

也許有人會問,梯度全部計算,不更新的話不就得了。 
這樣就涉及了效率的問題了,計算很多沒用的梯度是浪費了很多資源的(時間,計算機記憶體)


來源:http://blog.csdn.net/u012436149/article/details/66971822