tensor中的data()函数与detach()的区别
tensor中的data()函数与detach()的区别
detach()和data生成的都是无梯度的纯tensor,并且通过同一个tensor数据操作,是共享一块数据内存。
import torch t1 = torch.tensor([0,1.],requires_grad=True) t2=t1.detach() t3=t1.data print(t2.requires_grad,t3.requires_grad) --------------------------------------------- output: False, False
x.data和x.detach()新分离出来的tensor的requires_grad=False,即不可求导时两者之间没有区别,但是当当requires_grad=True的时候的两者之间的是有不同:x.data不能被autograd追踪求微分,但是x.detach可以被autograd()追踪求导。
x.data
import torch a = torch.tensor([1,2,3.], requires_grad=True) out = a.sigmoid() out ---------------------------------------------------- output: tensor([0.7311, 0.8808, 0.9526], grad_fn=<SigmoidBackward>) c = out.data c ----------------------------------------------------- output: tensor([0.7311, 0.8808, 0.9526]) c.zero_() # 归0化 out ------------------------------------------------------ tensor([0., 0., 0.], grad_fn=<SigmoidBackward>) out.sum().backward() a.grad ------------------------------------------------------- output:tensor([0., 0., 0.])
x.detach()
b = torch.tensor([1,2,3.], requires_grad=True) out1 = b.sigmoid() out1 ------------------------------------------------------ output:tensor([0.7311, 0.8808, 0.9526], grad_fn=<SigmoidBackward>) c1 = out1.detach() c1 ------------------------------------------------------ output:tensor([0.7311, 0.8808, 0.9526]) c1.zero_() out1.sum().backward() # 报错是是因为autograd追踪求导的时候发现数据已经发生改变,被覆盖。 ------------------------------------------------------- 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()是安全的。
参考:
https://zhuanlan.zhihu.com/p/83329768
https://blog.csdn.net/qq_27825451/article/details/96837905
相关知识
pytorch实现迁移训练
5 MLP版本的鸢尾花分类任务
【基于PyTorch实现经典网络架构的花卉图像分类模型】
Python中函数加括号和不加括号的区别
【免费】基于pytorch的深度学习花朵种类识别项目完整教程(内涵完整文件和代码)
python+Tensorflow+CNN花朵分类
基于pytorch搭建神经网络的花朵种类识别(深度学习)
基于CNN的MINIST手写数字识别项目代码以及原理详解
kears训练中如何实时输出卷积层的结果?
C++中重载、重写(覆盖)的区别实例分析
网址: tensor中的data()函数与detach()的区别 https://www.huajiangbk.com/newsview1012176.html
上一篇: (2009秋崇安区期中)如图在△ |
下一篇: kafka javax.man |
推荐分享

- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039