Я пытался глубже понять механизм автограда. Чтобы проверить мое понимание, я попытался написать следующий код, который, как я ожидал, выдал ошибку (т. Е. Попытка перевернуть график во второй раз ).
b = torch.Tensor([0.5])
for i in range(5):
b.data.zero_().add_(0.5)
b = b + a
c = b*a
c.backward()
Очевидно, он должен сообщить об ошибке, когда c.backward()
вызывается во второй раз в течение для l oop, потому что история b была освобождена ,, однако, ничего не происходит.
Но когда я пытался изменить b + a к b * a следующим образом:
b = torch.Tensor([0.5])
for i in range(5):
b.data.zero_().add_(0.5)
b = b * a
c = b*a
c.backward()
Он сообщил об ошибке, которую я ожидал. Это выглядит довольно странно для меня. Я не понимаю, почему в первом случае не вызывается ошибка, и почему важно изменить значение с + на *.