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 相关文章推荐
pycharm 使用心得(三)Hello world!
Jun 05 Python
Python数据类型学习笔记
Jan 13 Python
Python自定义主从分布式架构实例分析
Sep 19 Python
Python tkinter模块中类继承的三种方式分析
Aug 08 Python
python web基础之加载静态文件实例
Mar 20 Python
解决Python安装后pip不能用的问题
Jun 12 Python
Python实现判断一个整数是否为回文数算法示例
Mar 02 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
May 09 Python
OpenCV Python实现拼图小游戏
Mar 23 Python
Python使用文件操作实现一个XX信息管理系统的示例
Jul 02 Python
Django CBV模型源码运行流程详解
Aug 17 Python
Python尾递归优化实现代码及原理详解
Oct 09 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
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
PHP面向对象程序设计组合模式与装饰模式详解
2016/12/02 PHP
怎么用javascript进行拖拽
2006/07/20 Javascript
jQuery 行背景颜色的交替显示(隔行变色)实现代码
2009/12/13 Javascript
js String对象中常用方法小结(字符串操作)
2012/01/27 Javascript
JQuery 获取json数据$.getJSON方法的实例代码
2013/08/02 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
2013/12/31 Javascript
js左右弹性滚动对联广告代码分享
2014/02/19 Javascript
使用jQuery判断IE浏览器版本的代码
2014/06/14 Javascript
JavaScript及jquey实现多个数组的合并操作
2014/09/06 Javascript
js实现鼠标经过表格行变色的方法
2015/05/12 Javascript
JQuery创建DOM节点的方法
2015/06/11 Javascript
图解prototype、proto和constructor的三角关系
2016/07/31 Javascript
Javascript将JSON日期格式化
2016/08/23 Javascript
angular源码学习第一篇 setupModuleLoader方法
2016/10/20 Javascript
Vue中fragment.js使用方法详解
2017/03/09 Javascript
vue项目移动端实现ip输入框问题
2019/03/19 Javascript
js实现内置计时器
2019/12/16 Javascript
js实现点击生成随机div
2020/01/16 Javascript
JavaScript实时更新当前的时间的示例代码
2020/07/15 Javascript
React实现全选功能
2020/08/25 Javascript
一篇文章带你搞懂Vue虚拟Dom与diff算法
2020/08/25 Javascript
nodejs+express最简易的连接数据库的方法
2020/12/23 NodeJs
python实现udp数据报传输的方法
2014/09/26 Python
跟老齐学Python之用while来循环
2014/10/02 Python
python中urllib.unquote乱码的原因与解决方法
2017/04/24 Python
老生常谈进程线程协程那些事儿
2017/07/24 Python
python实现机器人行走效果
2018/01/29 Python
详解Pytorch显存动态分配规律探索
2020/11/17 Python
h5封装下拉刷新
2020/08/25 HTML / CSS
美国新蛋IT数码商城:Newegg.com
2016/07/21 全球购物
英国第二大营养品供应商:Vitabiotics
2016/10/01 全球购物
Omio波兰:全欧洲低价大巴、火车和航班搜索和比价
2018/02/16 全球购物
铭宣海淘转运:美国、日本、英国转运等全球转运公司
2019/09/10 全球购物
南京大屠杀观后感
2015/06/02 职场文书
爸爸的三轮车观后感
2015/06/16 职场文书