1. requires_grad
Variable變量的requires_grad的屬性默認(rèn)為False,若一個(gè)節(jié)點(diǎn)requires_grad被設(shè)置為T(mén)rue死陆,那么所有依賴它的節(jié)點(diǎn)的requires_grad都為T(mén)rue。
x=Variable(torch.ones(1))
w=Variable(torch.ones(1),requires_grad=True)
y=x*w
x.requires_grad,w.requires_grad,y.requires_grad
Out[23]: (False, True, True)
y依賴于w,w的requires_grad=True坚俗,因此y的requires_grad=True (類似or操作)
2. volatile
volatile=True是Variable的另一個(gè)重要的標(biāo)識(shí)镜盯,它能夠?qū)⑺幸蕾囁墓?jié)點(diǎn)全部設(shè)為volatile=True,其優(yōu)先級(jí)比requires_grad=True高猖败。因而volatile=True的節(jié)點(diǎn)不會(huì)求導(dǎo)速缆,即使requires_grad=True,也不會(huì)進(jìn)行反向傳播恩闻,對(duì)于不需要反向傳播的情景(inference艺糜,測(cè)試推斷),該參數(shù)可以實(shí)現(xiàn)一定速度的提升幢尚,并節(jié)省一半的顯存破停,因?yàn)槠洳恍枰4嫣荻取?br> 前方高能預(yù)警:如果你看完了前面volatile,請(qǐng)及時(shí)把它從你的腦海中擦除掉尉剩,因?yàn)?/p>
UserWarning: volatile was removed (Variable.volatile is always False)
該屬性已經(jīng)在0.4版本中被移除了真慢,并提示你可以使用with torch.no_grad()
代替該功能
x = torch.tensor([1], requires_grad=True)
with torch.no_grad():
... y = x * 2
y.requires_grad
False
@torch.no_grad()
def doubler(x):
return x * 2
z = doubler(x)
z.requires_grad
False
參考文章: https://blog.csdn.net/jiangpeng59/article/details/80667335