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使用新浪微博API发送微博的例子
Apr 10 Python
python使用点操作符访问字典(dict)数据的方法
Mar 16 Python
Python切片操作深入详解
Jul 27 Python
Python算法的时间复杂度和空间复杂度(实例解析)
Nov 19 Python
python numpy 反转 reverse示例
Dec 04 Python
Pytorch之finetune使用详解
Jan 18 Python
Django 解决阿里云部署同步数据库报错的问题
May 14 Python
keras实现theano和tensorflow训练的模型相互转换
Jun 19 Python
Python爬虫分析微博热搜关键词的实现代码
Feb 22 Python
Python实现简单的2048小游戏
Mar 01 Python
python读取并查看npz/npy文件数据以及数据显示方法
Apr 14 Python
Python内置类型集合set和frozenset的使用详解
Apr 26 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
利用discuz实现PHP大文件上传应用实例代码
2008/11/14 PHP
php使用MySQL保存session会话的方法
2015/06/26 PHP
thinkPHP框架实现图像裁剪、缩放、加水印的方法
2017/03/14 PHP
能说明你的Javascript技术很烂的五个原因分析
2011/10/28 Javascript
appendChild() 或 insertBefore()使用与区别介绍
2013/10/11 Javascript
使用js画图之圆、弧、扇形
2015/01/12 Javascript
jQuery手机拨号界面特效代码分享
2015/08/27 Javascript
Bootstrap每天必学之按钮
2015/11/26 Javascript
JS原型链怎么理解
2016/06/27 Javascript
AngularJS基础 ng-init 指令简单示例
2016/08/02 Javascript
从零开始学习Node.js系列教程六:EventEmitter发送和接收事件的方法示例
2017/04/13 Javascript
JavaScript正则表达式的贪婪匹配和非贪婪匹配
2017/09/05 Javascript
vue.js高德地图实现热点图代码实例
2019/04/18 Javascript
Node.js中文件系统fs模块的使用及常用接口
2020/03/06 Javascript
[01:59][TI9趣味视频] 全明星赛奖励
2019/08/23 DOTA
用实例说明python的*args和**kwargs用法
2013/11/01 Python
Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
2015/05/20 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
2017/11/01 Python
神经网络python源码分享
2017/12/15 Python
Python实现生成随机日期字符串的方法示例
2017/12/25 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
2018/04/02 Python
pandas数据分组和聚合操作方法
2018/04/11 Python
使用Python开发SQLite代理服务器的方法
2018/12/07 Python
简单介绍python封装的基本知识
2019/08/10 Python
python配置文件写入过程详解
2019/10/19 Python
使用python写一个自动浏览文章的脚本实例
2019/12/05 Python
如何在scrapy中集成selenium爬取网页的方法
2020/11/18 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
瑞士网球商店:Tennis-Point
2020/03/12 全球购物
波兰家居饰品和厨房配件网上商店:Maleomi
2020/12/15 全球购物
传播学毕业生求职信
2013/10/11 职场文书
团日活动总结
2014/04/28 职场文书
党员弘扬焦裕禄精神思想汇报
2014/09/10 职场文书
2019年共青团工作条例最新版
2019/11/12 职场文书
详解Python自动化之文件自动化处理
2021/06/21 Python
MySQL transaction事务安全示例讲解
2022/06/21 MySQL