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 拷贝对象(深拷贝deepcopy与浅拷贝copy)
Sep 06 Python
Python构造函数及解构函数介绍
Feb 26 Python
Python文件右键找不到IDLE打开项解决办法
Jun 08 Python
Python常用的内置序列结构(列表、元组、字典)学习笔记
Jul 08 Python
Python实现简单的四则运算计算器
Nov 02 Python
K-近邻算法的python实现代码分享
Dec 09 Python
python 判断文件还是文件夹的简单实例
Jun 10 Python
python 实现在tkinter中动态显示label图片的方法
Jun 13 Python
python二进制读写及特殊码同步实现详解
Oct 11 Python
Python爬虫工具requests-html使用解析
Apr 29 Python
详解运行Python的神器Jupyter Notebook
Jun 03 Python
详解Python为什么不用设计模式
Jun 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
PHP5常用函数列表(分享)
2013/06/07 PHP
php获取文件夹路径内的图片以及分页显示示例
2014/03/11 PHP
php中通过DirectoryIterator删除整个目录的方法
2015/03/13 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
JavaScript prototype属性深入介绍
2012/11/27 Javascript
js之ActiveX控件使用说明 new ActiveXObject()
2014/03/03 Javascript
JavaScript获取flash对象与网上的有所不同
2014/04/21 Javascript
在myeclipse中如何加入jquery代码提示功能
2014/06/03 Javascript
使用js dom和jquery分别实现简单增删改
2014/09/11 Javascript
删除Javascript Object中间的key
2014/11/18 Javascript
jquery日历插件e-calendar升级版
2016/11/10 Javascript
jQuery ajax的功能实现方法详解
2017/01/06 Javascript
分享bootstrap学习笔记心得(组件及其属性)
2017/01/11 Javascript
简单实现js放大镜效果
2017/07/24 Javascript
把vue-router和express项目部署到服务器的方法
2018/02/21 Javascript
ES6与CommonJS中的模块处理的区别
2018/06/13 Javascript
详解webpack import()动态加载模块踩坑
2018/07/17 Javascript
详解ES6 系列之异步处理实战
2018/10/26 Javascript
vue实现文字加密功能
2019/09/27 Javascript
浅谈关于vue中scss公用的解决方案
2019/12/02 Javascript
在服务器端实现无间断部署Python应用的教程
2015/04/16 Python
基于scrapy实现的简单蜘蛛采集程序
2015/04/17 Python
Python探索之ModelForm代码详解
2017/10/26 Python
Python实现进程同步和通信的方法
2018/01/02 Python
在python中获取div的文本内容并和想定结果进行对比详解
2019/01/02 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
2019/02/18 Python
Python常见数据类型转换操作示例
2019/05/08 Python
Python进阶:生成器 懒人版本的迭代器详解
2019/06/29 Python
SEPHORA新西兰官方网站:购买化妆品和护肤品
2016/12/02 全球购物
德国高性价比网上药店:medpex
2017/07/09 全球购物
心得体会范文
2014/01/04 职场文书
网吧消防安全制度
2014/01/28 职场文书
廉政承诺书2015
2015/04/28 职场文书
校园开放日新闻稿
2015/07/17 职场文书
java Nio使用NioSocket客户端与服务端交互实现方式
2021/06/15 Java/Android
Python如何让字典保持有序排列
2022/04/29 Python