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 相关文章推荐
浅谈MySQL中的触发器
May 05 Python
Python中shutil模块的学习笔记教程
Apr 04 Python
Python实现针对含中文字符串的截取功能示例
Sep 22 Python
Python网络编程详解
Oct 31 Python
python 按照固定长度分割字符串的方法小结
Apr 30 Python
python安装模块如何通过setup.py安装(超简单)
May 05 Python
Python模块的制作方法实例分析
Dec 21 Python
python 遗传算法求函数极值的实现代码
Feb 11 Python
python对Excel的读取的示例代码
Feb 14 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
May 23 Python
python如何删除文件、目录
Jun 23 Python
python绘制云雨图raincloud plot
Aug 05 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计算排列组合的方法
2013/11/13 PHP
PHP数据对象映射模式实例分析
2019/03/29 PHP
判断多个元素(RADIO,CHECKBOX等)是否被选择的原理说明
2009/02/18 Javascript
JS如何判断移动端访问设备并解析对应CSS
2013/11/27 Javascript
JS获取当前网页大小以及屏幕分辨率等
2014/09/05 Javascript
输入框过滤非数字的js代码
2014/09/18 Javascript
javascript实现可拖动变色并关闭层窗口实例
2015/05/15 Javascript
详解JavaScript编程中正则表达式的使用
2015/10/25 Javascript
15个常用的jquery代码片段
2015/12/19 Javascript
jQuery 3.0 的变化及使用方法
2016/02/01 Javascript
微信公众号 摇一摇周边功能开发
2016/12/08 Javascript
详解nodejs通过响应回写的方式渲染页面资源
2018/04/07 NodeJs
JS根据json数组多个字段排序及json数组常用操作
2019/06/06 Javascript
详解vue-video-player使用心得(兼容m3u8)
2019/08/23 Javascript
jQuery操作动画完整实例分析
2020/01/10 jQuery
JavaScript实现移动端弹窗后禁止滚动
2020/05/25 Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
2020/10/26 Javascript
JavaScript中条件语句的优化技巧总结
2020/12/04 Javascript
[03:43]2014DOTA2西雅图国际邀请赛 newbee战队巡礼
2014/07/07 DOTA
[06:11]2014DOTA2国际邀请赛 专访团结一心的VG战队
2014/07/21 DOTA
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
python 获取本机ip地址的两个方法
2013/02/25 Python
python自动化工具日志查询分析脚本代码实现
2013/11/26 Python
python调用java的Webservice示例
2014/03/10 Python
Python3基础之list列表实例解析
2014/08/13 Python
Python中 传递值 和 传递引用 的区别解析
2018/02/22 Python
python利用re,bs4,requests模块获取股票数据
2019/07/29 Python
html5指南-2.如何操作document metadata
2013/01/07 HTML / CSS
全球知名的婚恋交友网站:Match.com
2017/01/05 全球购物
巴西美妆购物网站:Kutiz Beauté
2019/03/13 全球购物
初三物理教学反思
2014/01/21 职场文书
中学生期末评语
2014/02/03 职场文书
善意的谎言事例
2014/02/15 职场文书
餐厅服务员岗位职责
2015/02/09 职场文书
CSS实现漂亮的时钟动画效果的实例代码
2021/03/30 HTML / CSS
PHP中国际化的字符串排序和比较对象详解
2021/08/23 PHP