PyTorch自动求和小例子

"""
这是一个 PyTorch 自动求导(autograd) 的最小例子:先对张量 x 做几步普通运算得到标量 out,再调用 out.backward(),自动算出 out 对 x 每个分量的梯度,并写入 x.grad。
"""

import torch

# requires_grad=True:跟踪对该张量的运算,构建计算图,后续可反向求 ∂loss/∂x
x = torch.ones(5, requires_grad=True)

# 与标量 2 相加:广播;y 仍参与计算图(由 x 衍生)
y = x + 2  # element-wise add

# 逐元素:z_i = 3 * y_i^2;整段计算在「无 torch.no_grad()」下都会记入 autograd 图
z = y * y * 3

# 标量 loss:mean 对 5 个元素求平均,得到 0 维张量,才能直接 .backward()(无参数)
out = z.mean()

print("自动求导:")
print(f"x: {x}")
print(f"y: {y}")
print(f"z: {z}")
print(f"out: {out}")

# 反向传播:从 out 沿计算图回传,把各叶子节点的 .grad 累加上 d(out)/d(该节点)
# 若 out 非标量,需 backward(gradient=...) 传入同形状梯度;此处 out 为标量,可省略
out.backward()

# x.grad:∂out/∂x,与 x 同形状;仅叶子节点且 requires_grad 时通常直接看 .grad
print(f"x 的梯度: {x.grad}")

 

posted @ 2026-08-11 09:17  Marksion  阅读(2)  评论(0)    收藏  举报