Pytorch - переносятся ли градиенты при создании новых переменных? - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть следующий код:

A = Tensor of [186,3]

Если я создаю новый пустой тензор следующим образом:

tempTens = torch.tensor(np.zeros((186,3)), requires_grad = True).cuda()

И я применяю некоторые операции к блоку A и выводу егов tempTens, который я полностью использую для дальнейших вычислений, скажем так:

tempTens[20,:] = SomeMatrix * A[20,:] 

Будут ли градиенты действительно переданы правильно, скажем, у меня есть функция стоимости, которая оптимизирует вывод tempTens на некоторую землюправда

1 Ответ

0 голосов
/ 01 февраля 2019

В этом случае tempTens[20,:] = SomeMatrix * A[20,:] - это операция на месте относительно tempTens, которая, как правило, не гарантирует работу с автоградой.Однако, если вы создадите новую переменную, применив такую ​​операцию, как конкатенация

output = torch.cat([SomeMatrix * A[20, :], torch.zeros(163, 3, device='cuda')], dim=0)

, вы получите тот же результат с точки зрения математики (матрица с первыми 20 строками из SomeMatrix * A[20, :]и следующие 166 строк 0), но это будет правильно работать с autograd.Вообще говоря, это правильный подход к решению подобных проблем.

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