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
个人评价,csdn这篇文字,几乎如同放屁。
讲了半天,也没看到.data与.detach的区别
所以,原始链接就不贴了
页:
[1]