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实现partial改变方法默认参数
Aug 18 Python
浅谈Pycharm调用同级目录下的py脚本bug
Dec 03 Python
Ubuntu下升级 python3.7.1流程备忘(推荐)
Dec 10 Python
Python自定义一个类实现字典dict功能的方法
Jan 19 Python
python2.7 安装pip的方法步骤(管用)
May 05 Python
python操作小程序云数据库实现简单的增删改查功能
Jun 06 Python
python文件转为exe文件的方法及用法详解
Jul 08 Python
Django 反向生成url实例详解
Jul 30 Python
Python列表list常用内建函数实例小结
Oct 22 Python
使用 Python 遍历目录树的方法
Feb 29 Python
python安装dlib库报错问题及解决方法
Mar 16 Python
Python使用UDP实现720p视频传输的操作
Apr 24 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
特详细的PHPMYADMIN简明安装教程
2008/08/01 PHP
php htmlentities和htmlspecialchars 的区别
2008/08/18 PHP
destoon之一键登录设置
2014/06/21 PHP
php发送邮件的问题详解
2015/06/22 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
基于PHP实现邮箱验证激活过程详解
2020/10/28 PHP
jquery ajax,ashx,json的用法总结
2014/02/12 Javascript
node.js中的events.emitter.once方法使用说明
2014/12/10 Javascript
jQuery实现的手机发送验证码倒计时效果代码分享
2015/08/24 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
2016/06/12 Javascript
全面解析Bootstrap表单样式的使用
2016/09/09 Javascript
jQuery实现元素的插入
2017/02/27 Javascript
详解webpack异步加载业务模块
2017/06/23 Javascript
Node.js学习之查询字符串解析querystring详解
2017/09/28 Javascript
详解Vue+axios+Node+express实现文件上传(用户头像上传)
2018/08/10 Javascript
js实现无缝轮播图效果
2020/03/09 Javascript
django模型层(model)进行建表、查询与删除的基础教程
2017/11/21 Python
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
2018/03/22 Python
python导入模块交叉引用的方法
2019/01/19 Python
python按行读取文件并找出其中指定字符串
2019/08/08 Python
Python matplotlib以日期为x轴作图代码实例
2019/11/22 Python
django修改models重建数据库的操作
2020/03/31 Python
Python 随机生成测试数据的模块:faker基本使用方法详解
2020/04/09 Python
python中zip()函数遍历多个列表方法
2021/02/18 Python
学点简单的Django之第一个Django程序的实现
2021/02/24 Python
优衣库台湾官网:UNIQLO台湾
2019/02/01 全球购物
软件测试常见笔试题
2012/02/04 面试题
《三峡》教学反思
2014/03/01 职场文书
2014年党建工作汇报材料
2014/10/27 职场文书
小班上学期幼儿评语
2014/12/30 职场文书
2015年世界水日活动总结
2015/02/09 职场文书
党支部意见范文
2015/06/02 职场文书
zabbix自定义监控nginx状态实现过程
2021/11/01 Servers
我去timi了,一起去timi是什么意思?
2022/04/13 杂记
python井字棋游戏实现人机对战
2022/04/28 Python
HTML5之高度塌陷问题的解决
2022/06/01 HTML / CSS