lee-romantic 's Blog
Everything is OK!
Toggle navigation
lee-romantic 's Blog
主页
About Me
归档
标签
PyTorch里的requires_grad、volatile及no_grad
2019-01-21 22:25:52
250
0
0
lee-romantic
##1. requires_grad ``Variable``变量的`requires_grad`的属性默认为`False`,**若一个节点requires_grad被设置为True,那么所有依赖它的节点的requires_grad都为True。** ``` 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`的另一个重要的标识,它能够将所有依赖它的节点全部设为`volatile=True`,**其优先级比requires_grad=True高。**因而`volatile=True`的节点不会求导,即使`requires_grad=True`,也不会进行反向传播,对于不需要反向传播的情景(inference,测试推断),该参数可以实现一定速度的提升,并节省一半的显存,因为其不需要保存梯度。 前方高能预警:如果你看完了前面volatile,请及时把它从你的脑海中擦除掉,因为 ``` UserWarning: volatile was removed (Variable.volatile is always False) ``` 该属性已经在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 ``注意:torch.Tensor生成的tensor,requires_grad默认为False。`` 作者:yalesaleng 链接:https://www.jianshu.com/p/ba203f4bcf4b 來源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
上一篇:
C++数组或者vector去重方式
下一篇:
鼠标点击操作
0
赞
250 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网
提交评论
立即登录
, 发表评论.
没有帐号?
立即注册
0
条评论
More...
文档导航
没有帐号? 立即注册