The .data field is an old field that is kept for backward compatibility but should not be used anymore as it’s usage is dangerous and can make computations wrong. You should use .detach() and/or with torch.no_grad() instead now.
Hi @albanD , if data should not be used can you please explain how to execute the following while still getting the model with the adjusted weights?
when I run:
i = 1
for w in LinModel.parameters():
torch.nn.init.eye_(w)
w.data = w.data*i
i += 1
the model weights are adjusted properly by a factor of i after the loop ends. if I don’t use data then just the identity init is saved.
Normally if you make in-place updates on a tensor it would update a version tracker that would error out if autograd realizes that the original tensor is needed for gradient computation during backward.
But if you save a tensor for backward, and then mutate its data property in-place, and then backward, you lose the protection of version counter checking and the results would be silently incorrect.