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

在 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

是及其容易忽略的错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值