pytorch 中的前向流传和反向流传
例如定义两个变量
import torch
a = torch.tensor(1.0, requires_grad=True)
b = torch.tensor(1.0, requires_grad=True)
- 正向流传就是按输出计算对应的输入
y = (a ** 2) * (b ** 3)
z = y ** 100
print(z)
打印失去
tensor(1., grad_fn=<PowBackward0>)
- 反向流传为 从输入往链式求导,直到计算到每个输出的偏导
例如 z 对 a 和 b 的偏导为
$$
100 * (a^{2} * b^{2})^{99} * 2 * a * b^{3}
$$
$$
100 * (a^{2} * b^{2})^{99} * a^{2} * 3 * b^{2}
$$
带入 a 和 b 的值 1 应该求出 200 300,测试代码
z.backward()
print(a.grad.data)
print(b.grad.data)
打印后果为
tensor(200.)
tensor(300.)