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”有什么作用?

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2023年8月9日
下一篇 2023年8月9日

相关推荐