Есть ли существенная разница между * и + для автограда Pytorch? - PullRequest
0 голосов
/ 13 января 2020

Я пытался глубже понять механизм автограда. Чтобы проверить мое понимание, я попытался написать следующий код, который, как я ожидал, выдал ошибку (т. Е. Попытка перевернуть график во второй раз ).

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()

Он сообщил об ошибке, которую я ожидал. Это выглядит довольно странно для меня. Я не понимаю, почему в первом случае не вызывается ошибка, и почему важно изменить значение с + на *.

1 Ответ

2 голосов
/ 13 января 2020

Разница заключается в том, что добавление константы не меняет градиент, но изменяет значение mull по const. Кажется, autograd знает об этом и оптимизирует «b = b + a».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...