导数是切线的斜率
将导数拓展到向量就是梯度 梯度指向值变化最大的方向 与等高线正交
因为定义x是有梯度的张量, y作为x的函数 可以计算关于x的梯度
x = torch.arange(4.0)
x.requires_grad_(True)
x.grad
y = torch.dot(x,x)
通过反向传播自动计算y关于x每个分量的梯度
y.backward() # 通过反向传播自动计算y关于x每个分量的梯度
x.grad
x.grad == 2*x
# 默认情况下pytorch会累计梯度 需要清除之前的值
x.grad.zero_()
y = x.sum()
y.backward()
x.grad
将某些计算移动到计算图之外
x.grad.zero_()
y = x * x
u = y.detach() # detach之后变为没有梯度的张量
z = u * x
z.sum().backward()
x.grad == u
本文介绍了如何使用PyTorch计算张量的梯度,从导数的概念出发,演示了如何通过反向传播计算函数的梯度,并展示了梯度在向量和张量中的应用,包括梯度方向、零梯度操作及detach的使用实例。
1495

被折叠的 条评论
为什么被折叠?



