tensor.detach() 和 tensor.data 的区别
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 的区别相关推荐
- PyTorch中 tensor.detach() 和 tensor.data 的区别
原文链接请参考:https://dreamhomes.top/posts/201906081516/ PyTorch0.4中,.data 仍保留,但建议使用 .detach(), 区别在于 .data ...
- pytorch的两个函数 tensor.detach(),tensor.detach_(),tensor.clone() 的作用和区别
前言:当我们在训练网络的时候可能希望保持一部分的网络参数不变,只对其中一部分的参数进行调整:或者值训练部分分支网络,并不让其梯度对主网络的梯度造成影响,这时候我们就需要使用detach()函数来切断一 ...
- torch.Tensor和torch.tensor有什么区别?
介绍 在PyTorch 中,torch.Tensor是主要的tensor类,所有的tensor都是torch.Tensor的实例.torch.Tensor是torch.FloatTensor的别名. ...
- torch.Tensor(dim)与torch.Tensor((dim)), torch.Tensor(dim1,dim2)与torch.Tensor((dim1,dim2))的区别
1 torch.Tensor(dim)与torch.Tensor((dim))的区别 从三张截图可以看出这两者其实是完全一样的,都表示的是这个张量的维度而不是这个张量的数据,其中第一处之所以不同是因为 ...
- pytorch 中的Tensor.detach介绍
detach的作用 Tensor.detach() 的作用是阻断反向梯度传播,当我们再训练网络的时候可能希望保持一部分的网络参数不变,只对其中一部分的参数进行调整:或者值训练部分分支网络,并不让其梯度 ...
- torch.Tensor和torch.tensor的区别
torch.Tensor和torch.tensor的区别 2019-06-10 16:34:48 Vic_Hao 阅读数 4058更多 分类专栏: Pytorch 在Pytorch中,Tensor和t ...
- Pytorch中的 torch.Tensor() 和 torch.tensor() 的区别
直接在搜索引擎里进行搜索,可以看到官方文档中两者对应的页面: 分别点击进去,第一个链接解释了什么是 torch.Tensor: torch.Tensor 是一个包含单一数据类型元素的多维矩阵(数组). ...
- pytorch tensor.detach
import torch as t x = t.ones(1, requires_grad=True) x.requires_grad #True y = t.ones(1, requires_gra ...
- 【深度学习】pytorch自动求导机制的理解 | tensor.backward() 反向传播 | tensor.detach()梯度截断函数 | with torch.no_grad()函数
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.pytorch里自动求导的基础概念 1.1.自动求导 requires_grad=True 1.2.求导 requ ...
- 【pytorch】.detach() .detach_() 和 .data==>用于切断反向传播
当我们再训练网络的时候可能 希望保持一部分的网络参数不变,只对其中一部分的参数进行调整: 或者只训练部分分支网络,并不让其梯度对主网络的梯度造成影响, 这时候我们就需要使用detach()函数来切断一 ...
最新文章
- 师大校园网迅雷解封软件 Ver1.0.1.5(2009-06-12)
- 分别使用 XHR、jQuery 和 Fetch 实现 AJAX
- Maven实战:Pom.xml详解
- vim莫名假死的解决办法
- idea 启动tomcat 工程_如何在IDEA中创建web项目并且部署到Tomcat中
- 真无线蓝牙耳机霸主之争:苹果AirPods和索尼WF-1000XM3怎么选?
- jQuery三天复习.md
- linux 17 中文输入,Rethat Linux Fedora17添加中文输入法
- Data Science With R In Visual Studio
- 【Matlab学习笔记】【图像滤波去噪】以-4,-8为中心的拉普拉斯滤波器
- android投屏小米盒子,Mibox S 小米盒子国际版:可能是 2019 新年最值的原生 AndroidTV...
- 浏览器打开页面的几种方式
- python函数调用:带()和不带()的区别
- 两台电脑如何直接用一根网线传数据?
- 家用智能摄像头横评:小米、华为海雀、TP-LINK、智汀
- 数据库中“一对一”、“一对多”、“多对多”的判断方法
- Yolov5训练自己的数据集+TensorRT加速+Qt部署
- 爬虫清洗:python strip()函数 去空格\n\r\t函数的用法
- [Unity][blender]在blender中新建标准两足人形骨骼模型动作导入到Unity中
- java 获取上市公司基本信息 代码测试
热门文章
- 概率论与数理统计基础
- 席位分配:惯例Q值法,dhondt法matlab实现
- Python 中的几种矩阵乘法 np.dot, np.multiply, *【转】
- 新建mavan项目转为web项目
- AWS 技术峰会真的50%都是技术
- Eclipse导出WAR包
- Android不同版本下Notification创建方法
- Python自然语言处理学习笔记(60):7.1 信息抽取
- 宫崎峻《となりのトトロ》(龙猫)全剧本(中日对照)(2)
- 在Exchange Server 2007中修改邮件接受域