torch detach()与.data
Data torch detach
2023-09-14 09:11:21 时间
转自:https://www.cnblogs.com/wupiao/articles/13323283.html
1.区别
- x.data和x.detach()都是从原有计算中分离出来的一个tensor变量 ,并且都是inplace operation.在进行autograd追踪求倒时,两个的常量是相同。
- 不同:.data时属性,detach()是方法。 x.data不是安全的,x.detach()是安全的。
2.例子
.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.])
.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 gradient computation has been modified by an
- x.data和x.detach()新分离出来的tensor的requires_grad=False,即不可求导时两者之间没有区别;
- 当requires_grad=True的时候的两者之间的是有不同:x.data不能被autograd追踪求微分,但是x.detach可以被autograd()追踪求导。
相关文章
- lombok插件:Data自动get/set方法, Slf4j实现Logger的调用
- [React Testing] Use Generated Data in Tests with tests-data-bot to Improve Test Maintainability
- [Algorithms] Tree Data Structure in JavaScript
- [Python] Slice the data with pandas
- Data truncation: Out of range value
- [Java Spring Data] Query by example
- [React Testing] Use Generated Data in Tests with tests-data-bot to Improve Test Maintainability
- [Redux] Fetching Data on Route Change
- Data Guard Broker系列之二:Data Guard Broker配置实战
- SAP CRM WebClient UI,点击Master Data工作中心后执行的JavaScript代码
- SAP 电商云和 Customer Data Cloud(CDC) 的登录集成过程中的一些问题分析
- Atitit Data Matrix dm码的原理与特点
- 论文解读(SimGRACE)《SimGRACE: A Simple Framework for Graph Contrastive Learning without Data Augmentation》
- jquery-data的三种用法