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中使用PIL模块处理图像的教程
Apr 29 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
Mar 24 Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
Jan 08 Python
python的dataframe转换为多维矩阵的方法
Apr 11 Python
Sanic框架蓝图用法实例分析
Jul 17 Python
python实现两张图片的像素融合
Feb 23 Python
Python 导入文件过程图解
Oct 15 Python
python文件操作的简单方法总结
Nov 07 Python
Python如何使用函数做字典的值
Nov 30 Python
Python实现计算图像RGB均值方式
Jun 04 Python
python文件读取失败怎么处理
Jun 23 Python
Python pip install之SSL异常处理操作
Sep 03 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采集时被封ip的解决方法
2010/08/29 PHP
php关联数组快速排序的方法
2015/04/17 PHP
PHP获取一年有几周以及每周开始日期和结束日期
2015/08/06 PHP
WordPress中调试缩略图的相关PHP函数使用解析
2016/01/07 PHP
Laravel5.1自定义500错误页面示例
2016/10/09 PHP
Yii核心验证器api详解
2016/11/23 PHP
ExtJS 2.0实用简明教程 之Border区域布局
2009/04/29 Javascript
javascript实现div的拖动并调整大小类似qq空间个性编辑模块
2012/12/12 Javascript
页面刷新时记住滚动条的位置jquery代码
2014/06/17 Javascript
如何解决easyui自定义标签 datagrid edit combobox 手动输入保存不上
2015/12/26 Javascript
JavaScript操作class和style样式代码详解
2016/02/13 Javascript
javascript显示倒计时控制按钮的简单实现
2016/06/07 Javascript
JavaScript制作颜色反转小游戏
2016/09/25 Javascript
实现高性能javascript的注意事项
2019/05/27 Javascript
javascript实现视频弹幕效果(两个版本)
2019/11/28 Javascript
jQuery HTML设置内容和属性操作实例分析
2020/05/20 jQuery
vue下拉刷新组件的开发及slot的使用详解
2020/12/23 Vue.js
Python操作串口的方法
2015/06/17 Python
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
2016/06/14 Python
Django视图和URL配置详解
2018/01/31 Python
Django 多语言教程的实现(i18n)
2018/07/07 Python
Django跨域请求CSRF的方法示例
2018/11/11 Python
python粘包问题及socket套接字编程详解
2019/06/29 Python
python下的opencv画矩形和文字注释的实现方法
2019/07/09 Python
Python集合基本概念与相关操作实例分析
2019/10/30 Python
天猫精选:上天猫,就够了
2016/09/21 全球购物
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
2015/07/16 面试题
体育专业个人求职信范文
2013/12/27 职场文书
反四风对照检查材料
2014/09/22 职场文书
2015年世界环境日活动总结
2015/02/11 职场文书
医院办公室主任岗位职责
2015/04/01 职场文书
英文辞职信范文
2015/05/13 职场文书
Matplotlib绘制混淆矩阵的实现
2021/05/27 Python
Python scrapy爬取起点中文网小说榜单
2021/06/13 Python
《地。-关于地球的运动-》单行本第七集上市,小说家朝井辽献上期待又害怕的推荐文
2022/03/31 日漫
js基于div丝滑实现贝塞尔曲线
2022/09/23 Javascript