x.data和x.detach()新分离出来的tensor的requires_grad=False,即不可求导时两者之间没有区别,但是当当requires_grad=True的时候的两者之间的是有不同:x.data不能被autograd追踪求微分,但是x.detach可以被autograd()追踪求导。

x.data

 1 import torch2 a = torch.tensor([1,2,3.], requires_grad=True)3 out = a.sigmoid()4 out 5 ----------------------------------------------------6 output: tensor([0.7311, 0.8808, 0.9526], grad_fn=<SigmoidBackward>)7 8 c = out.data9 c
10 -----------------------------------------------------
11 output: tensor([0.7311, 0.8808, 0.9526])
12
13 c.zero_()    # 归0化
14 out
15 ------------------------------------------------------
16 tensor([0., 0., 0.], grad_fn=<SigmoidBackward>)
17
18 out.sum().backward()
19 a.grad
20 -------------------------------------------------------
21 output:tensor([0., 0., 0.])

 x.detach()

1 b = torch.tensor([1,2,3.], requires_grad=True)2 out1 = b.sigmoid()3 out14 ------------------------------------------------------5 output:tensor([0.7311, 0.8808, 0.9526], grad_fn=<SigmoidBackward>)6 7 c1 = out1.detach()8 c19 ------------------------------------------------------
10 output:tensor([0.7311, 0.8808, 0.9526])
11
12 c1.zero_()
13 out1.sum().backward()   # 报错是是因为autograd追踪求导的时候发现数据已经发生改变,被覆盖。
14 -------------------------------------------------------
15 output: RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation:

总结:

  x.data和x.detach()都是从原有计算中分离出来的一个tensor变量 ,并且都是inplace operation.在进行autograd追踪求倒时,两个的常量是相同。

  不同:.data时属性,detach()是方法。 x.data不是安全的,x.detach()是安全的。

tensor.detach() 和 tensor.data 的区别相关推荐

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

    原文链接请参考:https://dreamhomes.top/posts/201906081516/ PyTorch0.4中,.data 仍保留,但建议使用 .detach(), 区别在于 .data ...

  2. pytorch的两个函数 tensor.detach(),tensor.detach_(),tensor.clone() 的作用和区别

    前言:当我们在训练网络的时候可能希望保持一部分的网络参数不变,只对其中一部分的参数进行调整:或者值训练部分分支网络,并不让其梯度对主网络的梯度造成影响,这时候我们就需要使用detach()函数来切断一 ...

  3. torch.Tensor和torch.tensor有什么区别?

    介绍 在PyTorch 中,torch.Tensor是主要的tensor类,所有的tensor都是torch.Tensor的实例.torch.Tensor是torch.FloatTensor的别名. ...

  4. torch.Tensor(dim)与torch.Tensor((dim)), torch.Tensor(dim1,dim2)与torch.Tensor((dim1,dim2))的区别

    1 torch.Tensor(dim)与torch.Tensor((dim))的区别 从三张截图可以看出这两者其实是完全一样的,都表示的是这个张量的维度而不是这个张量的数据,其中第一处之所以不同是因为 ...

  5. pytorch 中的Tensor.detach介绍

    detach的作用 Tensor.detach() 的作用是阻断反向梯度传播,当我们再训练网络的时候可能希望保持一部分的网络参数不变,只对其中一部分的参数进行调整:或者值训练部分分支网络,并不让其梯度 ...

  6. torch.Tensor和torch.tensor的区别

    torch.Tensor和torch.tensor的区别 2019-06-10 16:34:48 Vic_Hao 阅读数 4058更多 分类专栏: Pytorch 在Pytorch中,Tensor和t ...

  7. Pytorch中的 torch.Tensor() 和 torch.tensor() 的区别

    直接在搜索引擎里进行搜索,可以看到官方文档中两者对应的页面: 分别点击进去,第一个链接解释了什么是 torch.Tensor: torch.Tensor 是一个包含单一数据类型元素的多维矩阵(数组). ...

  8. pytorch tensor.detach

    import torch as t x = t.ones(1, requires_grad=True) x.requires_grad #True y = t.ones(1, requires_gra ...

  9. 【深度学习】pytorch自动求导机制的理解 | tensor.backward() 反向传播 | tensor.detach()梯度截断函数 | with torch.no_grad()函数

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.pytorch里自动求导的基础概念 1.1.自动求导 requires_grad=True 1.2.求导 requ ...

  10. 【pytorch】.detach() .detach_() 和 .data==>用于切断反向传播

    当我们再训练网络的时候可能 希望保持一部分的网络参数不变,只对其中一部分的参数进行调整: 或者只训练部分分支网络,并不让其梯度对主网络的梯度造成影响, 这时候我们就需要使用detach()函数来切断一 ...

最新文章

  1. 师大校园网迅雷解封软件 Ver1.0.1.5(2009-06-12)
  2. 分别使用 XHR、jQuery 和 Fetch 实现 AJAX
  3. Maven实战:Pom.xml详解
  4. vim莫名假死的解决办法
  5. idea 启动tomcat 工程_如何在IDEA中创建web项目并且部署到Tomcat中
  6. 真无线蓝牙耳机霸主之争:苹果AirPods和索尼WF-1000XM3怎么选?
  7. jQuery三天复习.md
  8. linux 17 中文输入,Rethat Linux Fedora17添加中文输入法
  9. Data Science With R In Visual Studio
  10. 【Matlab学习笔记】【图像滤波去噪】以-4,-8为中心的拉普拉斯滤波器
  11. android投屏小米盒子,Mibox S 小米盒子国际版:可能是 2019 新年最值的原生 AndroidTV...
  12. 浏览器打开页面的几种方式
  13. python函数调用:带()和不带()的区别
  14. 两台电脑如何直接用一根网线传数据?
  15. 家用智能摄像头横评:小米、华为海雀、TP-LINK、智汀
  16. 数据库中“一对一”、“一对多”、“多对多”的判断方法
  17. Yolov5训练自己的数据集+TensorRT加速+Qt部署
  18. 爬虫清洗:python strip()函数 去空格\n\r\t函数的用法
  19. [Unity][blender]在blender中新建标准两足人形骨骼模型动作导入到Unity中
  20. java 获取上市公司基本信息 代码测试

热门文章

  1. 概率论与数理统计基础
  2. 席位分配:惯例Q值法,dhondt法matlab实现
  3. Python 中的几种矩阵乘法 np.dot, np.multiply, *【转】
  4. 新建mavan项目转为web项目
  5. AWS 技术峰会真的50%都是技术
  6. Eclipse导出WAR包
  7. Android不同版本下Notification创建方法
  8. Python自然语言处理学习笔记(60):7.1 信息抽取
  9. 宫崎峻《となりのトトロ》(龙猫)全剧本(中日对照)(2)
  10. 在Exchange Server 2007中修改邮件接受域