Между проходами .backward()
Я бы хотел установить градиенты на ноль.Прямо сейчас я должен сделать это для каждого компонента отдельно (здесь это x
и t
), есть ли способ сделать это "глобально" для всех затронутых переменных?(Я представляю что-то вроде z.set_all_gradients_to_zero()
.)
Я знаю, что есть optimizer.zero_grad()
, если вы используете оптимизатор, но есть ли прямой путь без использования оптимизатора?
import torch
x = torch.randn(3, requires_grad = True)
t = torch.randn(3, requires_grad = True)
y = x + t
z = y + y.flip(0)
z.backward(torch.tensor([1., 0., 0.]), retain_graph = True)
print(x.grad)
print(t.grad)
x.grad.data.zero_() # both gradients need to be set to zero
t.grad.data.zero_()
z.backward(torch.tensor([0., 1., 0.]), retain_graph = True)
print(x.grad)
print(t.grad)