浅谈PyTorch中in-place operation的含义


Posted in Python onJune 27, 2020

in-place operation在pytorch中是指改变一个tensor的值的时候,不经过复制操作,而是直接在原来的内存上改变它的值。可以把它成为原地操作符。

在pytorch中经常加后缀“_”来代表原地in-place operation,比如说.add_() 或者.scatter()。python里面的+=,*=也是in-place operation。

下面是正常的加操作,执行结束加操作之后x的值没有发生变化:

import torch
x=torch.rand(2) #tensor([0.8284, 0.5539])
print(x)
y=torch.rand(2)
print(x+y)   #tensor([1.0250, 0.7891])
print(x)    #tensor([0.8284, 0.5539])

下面是原地操作,执行之后改变了原来变量的值:

import torch
x=torch.rand(2) #tensor([0.8284, 0.5539])
print(x)
y=torch.rand(2)
x.add_(y)
print(x)    #tensor([1.1610, 1.3789])

在官方问文档中由这一段话:

如果你使用了in-place operation而没有报错的话,那么你可以确定你的梯度计算是正确的。

补充知识:PyTorch中nn.ReLU(inplace=True)中inplace的作用

我们用PyTorch搭建神经网络时,会遇到nn.ReLU(inplace=True),inplace=True是什么意思呢?

nn.Conv2d(64,192,kernel_size=3,stride=1,padding=1),
nn.ReLu(inpalce=True),# inplace为True,默认为False

意思是:是否将计算得到的值直接覆盖之前的值

例如:x = x+1

即对原值x进行+1操作后得到的值,直接赋值给x

而不是如下找一个中间变量y:

y=x+1
x=y

先将x进行+1操作后赋值给中间变量y,然后将y值赋给x

这样就需要内存存储变量y

因此当inplace=True时:

就是对从上层网络nn.Conv2d中传递下来的tensor直接进行修改,这样能够节省运算内存,不用多存储其他变量。

以上这篇浅谈PyTorch中in-place operation的含义就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python用字典统计单词或汉字词个数示例
Apr 22 Python
python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)
May 25 Python
python实现微信接口(itchat)详细介绍
Oct 23 Python
Python读取word文本操作详解
Jan 22 Python
python在非root权限下的安装方法
Jan 23 Python
Python中str.join()简单用法示例
Mar 20 Python
Python 实现删除某路径下文件及文件夹的实例讲解
Apr 24 Python
python占位符输入方式实例
May 27 Python
Python+Pyqt实现简单GUI电子时钟
Feb 22 Python
为什么黑客都用python(123个黑客必备的Python工具)
Jan 31 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
Jan 28 Python
Python爬虫入门案例之爬取二手房源数据
Oct 16 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
Jun 27 #Python
pytorch 限制GPU使用效率详解(计算效率)
Jun 27 #Python
Pytorch 高效使用GPU的操作
Jun 27 #Python
Keras中的两种模型:Sequential和Model用法
Jun 27 #Python
keras输出预测值和真实值方式
Jun 27 #Python
使用Keras预训练好的模型进行目标类别预测详解
Jun 27 #Python
浅谈keras 模型用于预测时的注意事项
Jun 27 #Python
You might like
PHP中如何判断AJAX提交的数据
2012/02/05 PHP
Apply an AutoFormat to an Excel Spreadsheet
2007/06/12 Javascript
JS 继承实例分析
2008/11/04 Javascript
LazyLoad 延迟加载(按需加载)
2010/05/31 Javascript
Web 前端设计模式--Dom重构 提高显示性能
2010/10/22 Javascript
jquery插件制作教程 txtHover
2012/08/17 Javascript
js获取单选框或复选框值及操作
2012/12/18 Javascript
YUI模块开发原理详解
2013/11/18 Javascript
JSF中confirm弹出框的用法示例介绍
2014/01/07 Javascript
js中匿名函数的创建与调用方法分析
2014/12/19 Javascript
jQuery多个input求和的实现方法
2015/02/12 Javascript
jQuery控制DIV层实现由大到小,由远及近动画变化效果
2015/10/09 Javascript
JS实现网页标题栏显示当前时间和日期的完整代码
2015/11/02 Javascript
JQuery日期插件datepicker的使用方法
2016/03/03 Javascript
js实现对table的增加行和删除行的操作方法
2016/10/13 Javascript
使用JavaScript触发过渡效果的方法
2017/01/19 Javascript
JS批量替换内容中关键词为超链接
2017/02/20 Javascript
详解Vuejs2.0 如何利用proxyTable实现跨域请求
2017/08/03 Javascript
理解javascript async的用法
2017/08/22 Javascript
Vue核心概念Action的总结
2019/01/18 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
2019/11/05 Javascript
Vue页面刷新记住页面状态的实现
2019/12/27 Javascript
Vue实现 点击显示再点击隐藏效果(点击页面空白区域也隐藏效果)
2020/01/16 Javascript
Vue-cli assets SubDirectory及PublicPath区别详解
2020/08/18 Javascript
JavaScript中的几种继承方法示例
2020/12/06 Javascript
python 网络编程详解及简单实例
2017/04/25 Python
python读取视频流提取视频帧的两种方法
2020/10/22 Python
python实现抖音视频批量下载
2018/06/20 Python
python numpy 矩阵堆叠实例
2020/01/17 Python
python实现模拟器爬取抖音评论数据的示例代码
2021/01/06 Python
如果NULL和0作为空指针常数是等价的,那我到底该用哪一个
2014/09/16 面试题
设计顾问服务计划书
2014/05/04 职场文书
应聘教师求职信
2014/07/19 职场文书
单位活动策划方案
2014/08/17 职场文书
面试分析分布式架构Redis热点key大Value解决方案
2022/03/13 Redis
victoriaMetrics库布隆过滤器初始化及使用详解
2022/04/05 Golang