volatile 和 requires_grad在pytorch中的意思
阿新 • • 發佈:2019-01-24
Backward過程中排除子圖
pytorch
的BP
過程是由一個函式決定的,loss.backward()
,
可以看到backward()
函式裡並沒有傳要求誰的梯度。那麼我們可以大膽猜測,在BP
的過程中,pytorch
是將所有影響loss
的Variable
都求了一次梯度。但是有時候,我們並不想求所有Variable
的梯度。那就要考慮如何在Backward過程中排除子圖
(ie.排除沒必要的梯度計算)。
如何BP
過程中排除子圖? Variable
的兩個引數(requires_grad
和volatile
)
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