.data在pytorch中仍然有用吗?

时间:2018-08-08 09:31:29

标签: python version pytorch tensor

我是pytorch的新手。我读了很多pytorch代码,这些代码大量使用了张量的.data成员。但是我在官方文档和Google中搜索.data,却发现很少。我猜.data包含张量中的数据,但是我不知道何时需要它,何时不需要它?

2 个答案:

答案 0 :(得分:6)

.dataVariable的属性(代表Tensor的对象具有历史跟踪功能,例如用于自动更新),而不是Tensor。实际上,.data可以访问Variable的基础Tensor

但是,由于PyTorch版本0.4.0VariableTensor已合并(合并为更新的Tensor结构),所以.data沿前一个版本消失了Variable对象(Variable仍在此处以实现向后兼容,但已弃用)。


Release Notes中版本0.4.0的段落(我建议阅读有关Variable / Tensor更新的整个章节)

  

.data呢?

     

.data是从网站获取基础Tensor的主要方法   Variable。合并之后,调用y = x.data仍然具有类似的功能   语义。因此y将是一个Tensor,它与   x,与x的计算历史无关,并且具有   requires_grad=False

     

但是,.data在某些情况下可能是不安全的。 x.data上的任何更改   autograd不会跟踪,计算出的梯度将是   如果在向后传递中需要x,则错误。一个更安全的选择是   使用x.detach(),它还会返回共享数据的Tensor   与requires_grad=False一起使用,但会就地更改   如果autograd向后需要x,则由"apps": [ { "root": "src", "outDir": "dist", "assets": [ "assets" // <<< ], }] 报告。

答案 1 :(得分:0)

除了@benjaminplanche 的回答,我会用它来手动更改参数的值。

例如,我有以下模型:

model = nn.Sequential(nn.Linear(10, 1))

出于某种原因,我想手动更新其参数的值。然后,我可以这样做:

for param in model.parameters():
    param.data = 10 * param.data  # multiply the parameter values by 10.

请注意,如果我们删除 .data 后面的 param,参数值将不会更新。

这种用法可以在 BYOL (Bootstrap your own latent)this Github webpage for BYOL pytorch implementation 中找到。