.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.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…