Are in-place operations added to the computation graph/tracked by autograd?
This experiment makes me think yes since a_clone
has <MulBackward0>
as meta-data.
Let me know if this conclusion is correct:
def clone_playground():
import torch
a = torch.tensor([1,2,3.], requires_grad=True)
a_clone = a.clone()
print(f'a is a_clone = {a is a_clone}')
print(f'a == a_clone = {a == a_clone}')
print(f'a = {a}')
print(f'a_clone = {a_clone}')
#a_clone.fill_(2)
a_clone.mul_(2)
print(f'a = {a}')
print(f'a_clone = {a_clone}')
a_clone.sum().backward()
output:
a is a_clone = False
a == a_clone = tensor([True, True, True])
a = tensor([1., 2., 3.], requires_grad=True)
a_clone = tensor([1., 2., 3.], grad_fn=<CloneBackward>)
a = tensor([1., 2., 3.], requires_grad=True)
a_clone = tensor([2., 4., 6.], grad_fn=<MulBackward0>)
from here: Clone and detach in v0.4.0