目录
前言
在深度学习中,经常需要对函数求梯度(gradient)。PyTorch提供的autograd包能够根据输入和前向传播过程自动构建计算图,并执行反向传播。本文主要通过例子来介绍一下pytorch中torch.Tensor.backward()的简单用法。
标量变量的反向传播
PyTorch中,torch.Tensor是存储和变换数据的主要工具。如果你之前用过NumPy,你会发现Tensor和NumPy的多维数组非常类似。然而,Tensor提供GPU计算和自动求梯度等更多功能,这些使Tensor更加适合深度学习。
如果将PyTorch中的tensor属性requires_grad设置为True,它将开始追踪(track)在其上的所有操作(这样就可以利用链式法则进行梯度传播了)。完成计算后,可以调用backward()来完成所有梯度计算。此tensor的梯度将累积到grad属性中。
下面我们来看一个例子。
import torch
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
y = x ** 2 + 2
z = torch.sum(y)
z.backward()
print(x.grad)
tensor([2., 4., 6.])
下面先解释下这个grad怎么算的。
设\(x=[x_1,x_2,x_3]\),则