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最长公共子串算法实例
Mar 07 Python
Python中返回字典键的值的values()方法使用
May 22 Python
python操作redis的方法
Jul 07 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
Jul 02 Python
python+selenium开发环境搭建图文教程
Aug 11 Python
详解python和matlab的优势与区别
Jun 28 Python
wxpython实现按钮切换界面的方法
Nov 19 Python
Pytorch模型转onnx模型实例
Jan 15 Python
浅谈django 重载str 方法
May 19 Python
python 生成正态分布数据,并绘图和解析
Dec 21 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
Mar 03 Python
一篇文章带你了解Python和Java的正则表达式对比
Sep 15 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视频拍照上传头像功能实现代码分享
2015/10/08 PHP
PHP+Apache+Mysql环境搭建教程
2016/08/01 PHP
PHP正则表达式匹配替换与分割功能实例浅析
2017/02/04 PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
2018/05/28 PHP
JQuery弹出层示例可自定义
2014/05/19 Javascript
javascript继承机制实例详解
2014/11/20 Javascript
Jquery使用val方法读写value值
2015/05/18 Javascript
基于JQuery实现仿网易邮箱全屏动感滚动插件fullPage
2015/09/20 Javascript
jQuery 中ajax异步调用的四种方式
2016/06/28 Javascript
jQuery实现的自适应焦点图效果完整实例
2016/08/24 Javascript
js HTML5多图片上传及预览实例解析(不含前端的文件分割)
2016/08/26 Javascript
浅谈JS对html标签的属性的干预以及对CSS样式表属性的干预
2017/06/25 Javascript
Swiper 4.x 使用方法(移动端网站的内容触摸滑动)
2018/05/17 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
2018/08/16 Javascript
vue将毫秒数转化为正常日期格式的实例
2018/09/16 Javascript
vue中如何去掉空格的方法实现
2018/11/09 Javascript
vue项目前端知识点整理【收藏】
2019/05/13 Javascript
jquery css实现流程进度条
2020/03/26 jQuery
如何用JS模拟实现数组的map方法
2020/07/30 Javascript
JavaScript实现瀑布流布局的3种方式
2020/12/27 Javascript
python爬虫教程之爬取百度贴吧并下载的示例
2014/03/07 Python
python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
2014/08/15 Python
Python实现购物系统(示例讲解)
2017/09/13 Python
简单实现python进度条脚本
2017/12/18 Python
浅谈Python中的私有变量
2018/02/28 Python
对Python中plt的画图函数详解
2018/11/07 Python
pygame游戏之旅 创建游戏窗口界面
2018/11/20 Python
python实现多张图片拼接成大图
2019/01/15 Python
pymysql模块的操作实例
2019/12/17 Python
解决Tensorflow sess.run导致的内存溢出问题
2020/02/05 Python
深入浅析pycharm中 Make available to all projects的含义
2020/09/15 Python
python使用scapy模块实现ARP扫描的过程
2021/01/21 Python
特岗教师个人总结
2015/02/10 职场文书
小学生节水倡议书
2015/04/29 职场文书
关于Spring配置文件加载方式变化引发的异常详解
2022/01/18 Java/Android
纯CSS实现一个简单步骤条的示例代码
2022/07/15 HTML / CSS