浅谈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和shell变量互相传递的几种方法
Nov 20 Python
python根据经纬度计算距离示例
Feb 16 Python
Python的Flask框架中实现简单的登录功能的教程
Apr 20 Python
浅谈Python中列表生成式和生成器的区别
Aug 03 Python
python购物车程序简单代码
Apr 18 Python
使用anaconda的pip安装第三方python包的操作步骤
Jun 11 Python
python自带tkinter库实现棋盘覆盖图形界面
Jul 17 Python
如何基于Python批量下载音乐
Nov 11 Python
使用python求解二次规划的问题
Feb 29 Python
Python 输出详细的异常信息(traceback)方式
Apr 08 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
May 13 Python
Flask搭建一个API服务器的步骤
May 28 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
ThinkPHP空模块和空操作详解
2014/06/30 PHP
php 无限级分类 获取顶级分类ID
2016/03/13 PHP
Smarty模板变量调节器用法分析
2016/05/23 PHP
PHP学习记录之常用的魔术常量详解
2019/12/12 PHP
js可突破windows弹退效果代码
2008/08/09 Javascript
jquerydom对象的事件隐藏显示和对象数组示例
2013/12/10 Javascript
ECMAScript 6即将带给我们新的数组操作方法前瞻
2015/01/06 Javascript
jquery实现翻动fadeIn显示的方法
2015/03/05 Javascript
js代码验证手机号码和电话号码是否合法
2015/07/30 Javascript
jQuery使用$获取对象后检查该对象是否存在的实现方法
2016/09/04 Javascript
AngularJS表单验证中级篇(3)
2016/09/28 Javascript
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
2016/12/30 NodeJs
Vue2实时监听表单变化的示例讲解
2018/08/30 Javascript
vue里面使用mui的弹出日期选择插件实例
2018/09/16 Javascript
vue-cli项目代理proxyTable配置exclude的方法
2018/09/20 Javascript
JavaScript遍历DOM元素的常见方式示例
2019/02/16 Javascript
详解javascript对数组和json数组的操作
2019/04/15 Javascript
java和js实现的洗牌小程序
2019/09/30 Javascript
使用webpack将ES6转化ES5的实现方法
2019/10/13 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
如何利用JS将手机号中间四位变成*号
2020/09/29 Javascript
[00:39]DOTA2上海特级锦标赛 Liquid战队宣传片
2016/03/04 DOTA
[47:02]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS paiN
2018/03/30 DOTA
python 多进程通信模块的简单实现
2014/02/20 Python
对python 判断数字是否小于0的方法详解
2019/01/26 Python
python开发之anaconda以及win7下安装gensim的方法
2019/07/05 Python
在django模板中实现超链接配置
2019/08/21 Python
使用python绘制cdf的多种实现方法
2020/02/25 Python
tensorflow 大于某个值为1,小于为0的实例
2020/06/30 Python
俄语地区最大的中国商品在线购物网站之一:Umka Mall
2019/11/03 全球购物
如何用Python来进行查询和替换一个文本字符串
2014/01/02 面试题
奥巴马竞选演讲稿
2014/05/15 职场文书
英语课外活动总结
2014/08/27 职场文书
关于拾金不昧的感谢信
2015/01/21 职场文书
2015年七一建党节演讲稿
2015/03/19 职场文书
2016年寒假学习心得体会
2015/10/09 职场文书