PyTorch 面试题
目录

PyTorch 中 torch.Tensor 的 grad_fn 属性有什么作用?

· 约 3 分钟读完 · 第 29 / 125 章

推荐答案

在 PyTorch 中,torch.Tensor 的 grad_fn 属性用于存储该张量是如何通过操作生成的。具体来说,grad_fn 是一个指向 Function 对象的指针,该对象记录了创建该张量的操作,并用于在反向传播时计算梯度。

本题详细解读

1. grad_fn 的作用

grad_fn 是 torch.Tensor 的一个属性,它指向一个 Function 对象。这个 Function 对象记录了生成该张量的操作。例如,如果你对一个张量进行加法操作,生成的张量的 grad_fn 将指向一个 AddBackward 对象,该对象记录了加法操作的信息。

2. grad_fn 与自动微分

在 PyTorch 中,自动微分(Autograd)是通过计算图(Computation Graph)来实现的。每个张量的 grad_fn 属性就是这个计算图的一部分。当你调用 backward() 方法时,PyTorch 会沿着这个计算图反向传播,利用 grad_fn 中记录的操作信息来计算梯度。

3. grad_fn 的类型

grad_fn 的类型取决于生成该张量的操作。例如:

  • 如果张量是通过加法操作生成的,grad_fn 将是 AddBackward。
  • 如果张量是通过乘法操作生成的,grad_fn 将是 MulBackward。
  • 如果张量是通过用户直接创建的(例如使用 torch.tensor()),grad_fn 将是 None,因为这样的张量不是通过任何操作生成的。

4. 示例代码

在这个例子中,y 是通过加法操作生成的,因此它的 grad_fn 是 AddBackward。z 是通过乘法操作生成的,因此它的 grad_fn 是 MulBackward。out 是通过求均值操作生成的,因此它的 grad_fn 是 MeanBackward。