Is .data still useful in pytorch?

.data was an attribute of Variable (object representing Tensor with history tracking e.g. for automatic update), not Tensor. Actually, .data was giving access to the Variable‘s underlying Tensor.

However, since PyTorch version 0.4.0, Variable and Tensor have been merged (into an updated Tensor structure), so .data disappeared along the previous Variable object (well Variable is still there for backward-compatibility, but is deprecated).


Paragraph from Release Notes for version 0.4.0 (I recommend reading the whole section about Variable/Tensor updates):

What about .data?

.data was the primary way to get the underlying Tensor from a
Variable. After this merge, calling y = x.data still has similar
semantics. So y will be a Tensor that shares the same data with
x, is unrelated with the computation history of x, and has
requires_grad=False.

However, .data can be unsafe in some cases. Any changes on x.data
wouldn’t be tracked by autograd, and the computed gradients would be
incorrect if x is needed in a backward pass. A safer alternative is
to use x.detach(), which also returns a Tensor that shares data
with requires_grad=False, but will have its in-place changes
reported by autograd if x is needed in backward.

Leave a Comment