浅谈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的Django框架中实现Hacker News的一些功能
Apr 17 Python
python if not in 多条件判断代码
Sep 21 Python
详解Python3操作Mongodb简明易懂教程
May 25 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
Jul 25 Python
Django ORM框架的定时任务如何使用详解
Oct 19 Python
Python中常见的异常总结
Feb 20 Python
python3.5绘制随机漫步图
Aug 27 Python
python list格式数据excel导出方法
Oct 31 Python
python dict 相同key 合并value的实例
Jan 21 Python
原来我一直安装 Python 库的姿势都不对呀
Nov 11 Python
python 调用Google翻译接口的方法
Dec 09 Python
Python 多线程处理任务实例
Nov 07 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
兼容PHP5的PHP目录管理函数库
2008/07/10 PHP
PHP print类函数使用总结
2010/06/25 PHP
PHP与Web页面的交互示例详解一
2020/08/04 PHP
用JS实现的一个include函数
2007/07/21 Javascript
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
jQuery1.3.2 升级到jQuery1.4.4需要修改的地方
2011/01/06 Javascript
有关于JS辅助函数inherit()的问题
2013/04/07 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
2015/08/18 Javascript
JS生成某个范围的随机数【四种情况详解】
2016/04/20 Javascript
常用原生js自定义函数总结
2016/11/20 Javascript
Bootstrap选项卡动态切换效果
2016/11/28 Javascript
浅谈javascript中的数据类型转换
2016/12/27 Javascript
Node.js连接MongoDB数据库产生的问题
2017/02/08 Javascript
React Native AsyncStorage本地存储工具类
2017/10/24 Javascript
vue组件jsx语法的具体使用
2018/05/21 Javascript
vue2中使用sass并配置全局的sass样式变量的方法
2018/09/04 Javascript
如何将百度地图包装成Vue的组件的方法步骤
2019/02/12 Javascript
BootStrap前端框架使用方法详解
2020/02/26 Javascript
详解如何在Javascript中使用Object.freeze()
2020/10/18 Javascript
python插入排序算法实例分析
2015/07/03 Python
Python的Django应用程序解决AJAX跨域访问问题的方法
2016/05/31 Python
Python中如何获取类属性的列表
2016/12/26 Python
Python语言实现百度语音识别API的使用实例
2017/12/13 Python
python多个模块py文件的数据共享实例
2019/01/11 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
django框架ModelForm组件用法详解
2019/12/11 Python
python手机号前7位归属地爬虫代码实例
2020/03/31 Python
Python实现画图软件功能方法详解
2020/07/28 Python
俄罗斯香水在线商店:AromaCode
2019/12/04 全球购物
德国珠宝和配件商店:Styleserver
2021/02/23 全球购物
和谐家庭演讲稿
2014/05/24 职场文书
2014年团队工作总结
2014/11/24 职场文书
2015试用期转正工作总结
2014/12/12 职场文书
2016年教师节感恩寄语
2015/12/04 职场文书
react合成事件与原生事件的相关理解
2021/05/13 Javascript
Kubernetes部署实例并配置Deployment、网络映射、副本集
2022/04/01 Servers