Brando_Miranda:

sorry for being so insistent. But right now I am just immensely curious why:
W.data = W.data - eta*W.grad.data
would be a bad idea. It seems it works fine when I try it (maybe cuz its not in place?)


The fact that it works fine is a feature (as mentioned by @apaszke in slack), but there are reasons why it wouldn’t necessarily be the case.
W is a Variable that holds a tensor in W.data. Now, what happens if you change the tensor that W originally points to, by doing W.data = new_tensor? W should now point to new_tensor, but W is a Variable that was supposed to represent the original tensor present.