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


Posted in Python onJanuary 06, 2020

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 gradient
computation has been modified by an

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

Python 相关文章推荐
python文件写入实例分析
Apr 08 Python
Python实现一个转存纯真IP数据库的脚本分享
May 21 Python
Python求一批字符串的最长公共前缀算法示例
Mar 02 Python
Python实现计算对象的内存大小示例
Jul 10 Python
django admin 自定义替换change页面模板的方法
Aug 23 Python
Python使用get_text()方法从大段html中提取文本的实例
Aug 27 Python
python中Lambda表达式详解
Nov 20 Python
Django调用支付宝接口代码实例详解
Apr 04 Python
在django admin中配置搜索域是一个外键时的处理方法
May 20 Python
序列化Python对象的方法
Aug 01 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
Nov 18 Python
Python万能模板案例之matplotlib绘制直方图的基本配置
Apr 13 Python
6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
Jan 06 #Python
基于python+selenium的二次封装的实现
Jan 06 #Python
Python使用Tkinter实现滚动抽奖器效果
Jan 06 #Python
Python使用Tkinter实现转盘抽奖器的步骤详解
Jan 06 #Python
pytorch 实现在预训练模型的 input上增减通道
Jan 06 #Python
Python 将json序列化后的字符串转换成字典(推荐)
Jan 06 #Python
Python tkinter三种布局实例详解
Jan 06 #Python
You might like
php实现jQuery扩展函数
2009/10/30 PHP
浅谈PHP中其他类型转化为Bool类型
2016/03/28 PHP
Avengerls vs KG BO3 第三场2.18
2021/03/10 DOTA
不用ajax实现点击文字即可编辑的方法
2007/12/16 Javascript
javascript网页关键字高亮代码
2008/07/30 Javascript
jquery下jstree简单应用 - v1.0
2011/04/14 Javascript
读jQuery之十三 添加事件和删除事件的核心方法
2011/08/23 Javascript
javascript中全局对象的isNaN()方法使用介绍
2013/12/19 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
JS判断变量是否为空判断是否null
2014/07/25 Javascript
Javascript中this的用法详解
2014/09/22 Javascript
js获取会话框prompt的返回值的方法
2015/01/10 Javascript
jQuery Real Person验证码插件防止表单自动提交
2015/11/06 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
详解Bootstrap创建表单的三种格式(一)
2016/01/04 Javascript
基于JS实现新闻列表无缝向上滚动实例代码
2016/01/22 Javascript
JS使用onerror捕获异常示例
2016/08/03 Javascript
AngularJS深入探讨scope,继承结构,事件系统和生命周期
2016/11/02 Javascript
微信小程序 scroll-view隐藏滚动条详解
2017/01/16 Javascript
vue2.0父子组件及非父子组件之间的通信方法
2017/01/21 Javascript
详解用node-images 打造简易图片服务器
2017/05/08 Javascript
Swiper实现轮播图效果
2017/07/03 Javascript
JS组件库AlloyTouch实现图片轮播过程解析
2020/05/29 Javascript
Vue Object.defineProperty及ProxyVue实现双向数据绑定
2020/09/02 Javascript
[04:44]DOTA2英雄梦之声_第12期_矮人直升机
2014/06/21 DOTA
使用python判断你是青少年还是老年人
2018/11/29 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
2019/06/27 Python
Django实现发送邮件功能
2019/07/18 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
2020/12/04 Python
css3实现信纸/同学录效果的示例代码
2018/12/11 HTML / CSS
de Bijenkorf比利时官网:荷兰最知名的百货商店
2017/06/29 全球购物
2014信息技术专业毕业生自我评价
2014/01/17 职场文书
大学生创业感言
2014/01/25 职场文书
《胡杨》教学反思
2014/02/16 职场文书
入党转正介绍人意见
2015/06/03 职场文书
详解Python魔法方法之描述符类
2021/05/26 Python