shaoheshaohe 发表于 2020-5-13 08:38:45

PyTorch中 tensor.detach() 和 tensor.data 的区别 ———————...

PyTorch0.4中,.data 仍保留,但建议使用 .detach(), 区别在于 .data 返回和 x 的相同数据 tensor, 但不会加入到x的计算历史里,且require s_grad = False, 这样有些时候是不安全的, 因为 x.data 不能被 autograd 追踪求微分 。 .detach() 返回相同数据的 tensor ,且 requires_grad=False ,但能通过 in-place 操作报告给 autograd 在进行反向传播的时候.
举例:
tensor.data

>>> a = torch.tensor(, requires_grad =True)
>>> out = a.sigmoid()
>>> c = out.data
>>> c.zero_()
tensor([ 0., 0., 0.])

>>> out                   #out的数值被c.zero_()修改
tensor([ 0., 0., 0.])

>>> out.sum().backward()#反向传播
>>> a.grad                #这个结果很严重的错误,因为out已经改变了
tensor([ 0., 0., 0.])
1
2
3
4
5
6
7
8
9
10
11
12
tensor.detach()

>>> a = torch.tensor(, requires_grad =True)
>>> out = a.sigmoid()
>>> c = out.detach()
>>> c.zero_()
tensor([ 0., 0., 0.])

>>> out                   #out的值被c.zero_()修改 !!
tensor([ 0., 0., 0.])

>>> out.sum().backward()#需要原来out得值,但是已经被c.zero_()覆盖了,结果报错
RuntimeError: one of the variables needed for gradient
computation has been modified by an


shaoheshaohe 发表于 2020-5-13 08:39:23

个人评价,csdn这篇文字,几乎如同放屁。

讲了半天,也没看到.data与.detach的区别

所以,原始链接就不贴了
页: [1]
查看完整版本: PyTorch中 tensor.detach() 和 tensor.data 的区别 ———————...