PyTorch 中如何使用 backward 方法计算梯度?

推荐答案

在 PyTorch 中,backward() 方法用于自动计算梯度。以下是一个简单的示例:

-- -------------------- ---- -------
------ -----

- --------- ------------------ -----
- - ----------------- -------------------

- -------
- - ---- - --- - -

- -- ---------- ------
------------

- ----
-------------  - --- ----------

在这个例子中,yx 的函数,y.backward() 会计算 yx 的梯度,并将结果存储在 x.grad 中。

本题详细解读

1. 创建张量并设置 requires_grad=True

在 PyTorch 中,张量的 requires_grad 属性用于指示是否需要计算该张量的梯度。默认情况下,requires_gradFalse。如果设置为 True,PyTorch 会跟踪所有与该张量相关的操作,以便后续计算梯度。

2. 定义计算图

在 PyTorch 中,计算图是通过张量之间的操作动态构建的。在这个例子中,yx 的函数,计算图如下:

3. 使用 backward() 方法计算梯度

backward() 方法用于自动计算梯度。它会从调用该方法的张量(通常是损失函数)开始,沿着计算图反向传播,计算每个需要梯度的张量的梯度。

4. 访问梯度

计算完成后,梯度会存储在对应张量的 .grad 属性中。在这个例子中,x.grad 会存储 yx 的梯度。

5. 梯度计算的具体过程

在这个例子中,y = x**2 + 3*x + 1,所以 yx 的导数是 2*x + 3。当 x = 2.0 时,导数为 2*2 + 3 = 7,因此 x.grad 的值为 7.0

6. 注意事项

  • backward() 方法通常用于标量张量。如果 y 是一个向量或矩阵,需要传递一个与 y 形状相同的张量作为 gradient 参数。
  • 每次调用 backward() 后,梯度会累积在 .grad 属性中。如果不需要累积梯度,可以在每次反向传播前调用 x.grad.zero_() 来清零梯度。
纠错
反馈