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

时间:2021-05-22

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([1,2,3.], 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.])

tensor.detach()

>>> a = torch.tensor([1,2,3.], 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 gradientcomputation has been modified by an

以上这篇PyTorch中 tensor.detach() 和 tensor.data 的区别详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章