python:torch.no_grad()的作用 + requires_grad,grad_fn,grad的含义及使用

1. requires_grad,grad_fn,grad的含义及使用

requires_grad:

如果需要为张量计算梯度,则为True,否则为False。我们使用pytorch创建tensor时,可以指定requires_grad为True(默认为False)

grad_fn:

grad_fn用来记录变量是怎么来的,方便计算梯度,y = x*3,grad_fn记录了y由x计算的过程。

grad:

当执行完了backward()之后,通过x.grad查看x的梯度值。

2. python:torch.no_grad()的作用

说法1:

包装器“ with torch.no_grad()”将所有require_grad标志临时设置为false。

不希望PyTorch计算新定义的变量param的梯度(减少计算量),因为他只想更新它们的值。

说法2:

“with ”torch.no_grad()的使用就像一个循环,其中循环内的每个张量都将requires_grad设置为False。

这意味着当前与当前计算图相连的任何具有梯度的张量现在都与当前图分离。我们不再能够计算关于这个张量的梯度。

张量从当前图中分离,直到它在循环内。一旦它离开循环,如果张量是用梯度定义的,它就会再次附加到当前图。

代码:

def sgd(params, lr, batch_size):  
    """小批量随机梯度下降"""
    with torch.no_grad():
        for param in params:
            param -= lr * param.grad / batch_size
            param.grad.zero_()

保证param原地数值改变操作下requires_grad=True不变。

参考资料:
requires_grad,grad_fn,grad的含义及使用
测试torch.no_grad()的作用
pytorch中torch.no_grad有什么用?
PyTorch 中的“with torch no_grad”有什么作用?

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值