【发布时间】:2020-08-10 13:03:35
【问题描述】:
我希望针对不同变量计算不同损失的梯度,然后将这些变量一起计算。
这是一个简单的例子,展示了我想要什么:
import torch as T
x = T.randn(3, requires_grad = True)
y = T.randn(4, requires_grad = True)
z = T.randn(5, requires_grad = True)
x_opt = T.optim.Adadelta([x])
y_opt = T.optim.Adadelta([y])
z_opt = T.optim.Adadelta([z])
for i in range(n_iter):
x_opt.zero_grad()
y_opt.zero_grad()
z_opt.zero_grad()
shared_computation = foobar(x, y, z)
x_loss = f(x, y, z, shared_computation)
y_loss = g(x, y, z, shared_computation)
z_loss = h(x, y, z, shared_computation)
x_loss.backward_with_respect_to(x)
y_loss.backward_with_respect_to(y)
z_loss.backward_with_respect_to(z)
x_opt.step()
y_opt.step()
z_opt.step()
我的问题是我们如何在 PyTorch 中完成 backward_with_respect_to 部分?我只想要x 的渐变w.r.t。 x_loss 等。然后我希望所有优化器齐头并进(基于 x、y 和 z 的当前值)。
【问题讨论】:
标签: optimization pytorch autograd