Обнуление градиента в PyTorch
Без обнуления поля повторный
обратный проход складывает новый
градиент с тем, что уже лежит
в атрибуте grad. Перед новым
шагом
поле обнуляют, присвоив ему
значение None:
import torch
w = torch.tensor(2.0, requires_grad=True)
y = w * w
y.backward()
print(w.grad) # выведет tensor(4.)
w.grad = None
print(w.grad is None) # выведет True
Если не обнулить градиент, второй обратный проход по новому выражению с тем же весом добавит значение к прежнему:
import torch
w = torch.tensor(2.0, requires_grad=True)
y = w * w
y.backward()
print(w.grad) # выведет tensor(4.)
y = w * w
y.backward()
print(w.grad) # выведет tensor(8.)
w.grad = None
y = w * w
y.backward()
print(w.grad) # выведет tensor(4.)
Для дробного 3.0 с записью
дважды подряд найдите квадрат
и каждый раз выполните обратный
проход, не очищая поле градиента.
Выведите градиент после второго
прохода.
Для дробного 3.0 с записью
найдите квадрат и обратный проход,
затем присвойте полю градиента
пустое значение и выведите,
что оно снова пустое.
Для дробного 2.0 с записью
сделайте два обратных прохода
по квадрату без очистки, затем
очистите градиент, снова постройте
квадрат и один обратный проход.
Выведите итоговый градиент.