浅谈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编写检测数据库SA用户的方法
Jul 11 Python
Python中运行并行任务技巧
Feb 26 Python
Ruby元编程基础学习笔记整理
Jul 02 Python
python操作mysql数据库
Mar 05 Python
python中模块查找的原理与方法详解
Aug 11 Python
Python实现读写INI配置文件的方法示例
Jun 09 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
Jun 14 Python
使用Python+wxpy 找出微信里把你删除的好友实例
Feb 21 Python
pandas.cut具体使用总结
Jun 24 Python
python opencv调用笔记本摄像头
Aug 28 Python
python3中rank函数的用法
Nov 27 Python
Python建造者模式案例运行原理解析
Jun 29 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
图形数字验证代码
2006/10/09 PHP
一个php生成16位随机数的代码(两种方法)
2014/09/16 PHP
php常用字符串String函数实例总结【转换,替换,计算,截取,加密】
2016/12/07 PHP
RSA实现JS前端加密与PHP后端解密功能示例
2019/08/05 PHP
PHP ElasticSearch做搜索实例讲解
2020/02/05 PHP
JavaScript中的prototype使用说明
2010/04/13 Javascript
js操作textarea 常用方法总结
2012/12/03 Javascript
JavaScript 模拟类机制及私有变量的方法及思路
2013/07/10 Javascript
Jquery.addClass始终无效原因分析
2013/09/08 Javascript
利用函数的惰性载入提高javascript代码执行效率
2014/05/05 Javascript
jQuery 选择器详解
2015/01/19 Javascript
完美实现bootstrap分页查询
2015/12/09 Javascript
JavaScript代码生成PDF文件的方法
2016/02/26 Javascript
NodeJS实现客户端js加密
2017/01/09 NodeJs
JS实现课堂随机点名和顺序点名
2017/03/09 Javascript
微信小程序 本地数据读取实例
2017/04/27 Javascript
JS库 Highlightjs 添加代码行号的实现代码
2017/09/13 Javascript
javascript按顺序加载运行js方法
2017/12/01 Javascript
angular2中使用第三方js库的实例
2018/02/26 Javascript
vue 国际化 vue-i18n 双语言 语言包
2018/06/07 Javascript
Bootstrap模态对话框用法简单示例
2018/08/31 Javascript
iview同时验证多个表单问题总结
2018/09/29 Javascript
Windows下Node爬虫神器Puppeteer安装记
2019/01/09 Javascript
vue实现导航菜单和编辑文本的示例代码
2020/07/04 Javascript
python  创建一个保留重复值的列表的补码
2018/10/15 Python
对pandas写入读取h5文件的方法详解
2018/12/28 Python
Python两个字典键同值相加的几种方法
2019/03/05 Python
numpy数组广播的机制
2019/07/12 Python
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
HTML5实现移动端点击翻牌功能
2020/10/23 HTML / CSS
Carolina Lemke Berlin澳大利亚官网:时尚太阳镜品牌
2019/09/17 全球购物
Gerry Weber德国官网:优质女性时装,德国最大的时装公司之一
2019/11/02 全球购物
大学学风建设方案
2014/05/04 职场文书
私人房屋买卖协议书
2014/10/04 职场文书
2015年终个人政治思想工作总结
2015/11/24 职场文书
如何将numpy二维数组中的np.nan值替换为指定的值
2021/05/14 Python