0
点赞
收藏
分享

微信扫一扫

Pytorch中不会自动传播梯度的操作有哪些?

猎书客er 2024-10-13 阅读 21

在 PyTorch 中,某些生成张量的操作本身不会创建与计算图相关联的梯度信息。这些操作通常用于初始化张量,并且默认情况下不需要进行梯度计算。以下是一些常见的不会自动传播梯度的张量生成操作:

  1. 数值初始化操作

    • torch.linspace(): 用于生成等差数列的张量。
    • torch.arange(): 类似于 Python 的 range(),用于生成指定范围内的序列。
    • torch.zeros(), torch.zeros_like(): 用于生成全 0 张量。
    • torch.ones(), torch.ones_like(): 用于生成全 1 张量。
    • torch.full(): 用于创建每个元素都是指定值的张量。
    • torch.empty(), torch.empty_like(): 用于创建未初始化的张量。
  2. 随机初始化操作

    • torch.rand(), torch.rand_like(): 用于生成 0 到 1 范围内服从均匀分布的随机数张量。
    • torch.randn(), torch.randn_like(): 用于生成均值为 0、标准差为 1 的正态分布的随机数张量。
    • torch.randint(), torch.randint_like(): 生成整数随机数张量。
  3. 创建单位矩阵

    • torch.eye(): 用于生成单位矩阵。

这些操作生成的张量默认情况下 requires_grad 属性是 False,因此即使在计算过程中这些张量的值被用作操作数,也不会在反向传播时计算其梯度。

如果需要将这些生成的张量用于需要梯度计算的操作时,需要手动设置 requires_grad=True,例如:

x = torch.linspace(0, 1, steps=10, requires_grad=True)

这样,x 在后续的操作中就会被包含在计算图中,从而能够计算梯度。
但是类似下面:

x = torch.linspace(-2, 2, 100, requires_grad=True) * torch.pi

是及其容易忽略的错误。

举报

相关推荐

0 条评论