Я пытаюсь немного лучше понять обратное распространение в pytorch. У меня есть фрагмент кода, который успешно выполняет обратное распространение от выхода d к листовой переменной a, но затем, если я добавлю шаг изменения формы, обратное распространение больше не даст входному градиенту.
Я знаю, что изменение формы неуместно, но я все еще не уверен, как контекстуализировать это.
Есть предположения?
Спасибо.
#Works
a = torch.tensor([1.])
a.requires_grad = True
b = torch.tensor([1.])
c = torch.cat([a,b])
d = torch.sum(c)
d.backward()
print('a gradient is')
print(a.grad) #=> Tensor([1.])
#Doesn't work
a = torch.tensor([1.])
a.requires_grad = True
a = a.reshape(a.shape)
b = torch.tensor([1.])
c = torch.cat([a,b])
d = torch.sum(c)
d.backward()
print('a gradient is')
print(a.grad) #=> None