浅谈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查询mysql中文乱码问题
Nov 09 Python
python通过smpt发送邮件的方法
Apr 30 Python
利用Python破解验证码实例详解
Dec 08 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
Mar 29 Python
详解Python安装scrapy的正确姿势
Jun 26 Python
python生成n个元素的全组合方法
Nov 13 Python
python使用Turtle库绘制动态钟表
Nov 19 Python
python实现在函数中修改变量值的方法
Jul 16 Python
Python实现CNN的多通道输入实例
Jan 17 Python
pyspark对Mysql数据库进行读写的实现
Dec 30 Python
pytorch实现线性回归以及多元回归
Apr 11 Python
对PyTorch中inplace字段的全面理解
May 22 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
在Windows版的PHP中使用ADO
2006/10/09 PHP
thinkphp框架实现删除和批量删除
2016/06/29 PHP
yii2学习教程之5种内置行为类详解
2017/08/03 PHP
firefox火狐浏览器与与ie兼容的2个问题总结
2010/07/20 Javascript
js跑马灯代码(自写)
2013/04/17 Javascript
javascript阻止scroll事件多次执行的思路及实现
2013/11/08 Javascript
js中的eventType事件及其浏览器支持性介绍
2013/11/29 Javascript
js中settimeout方法加参数
2014/02/28 Javascript
一张表格告诉你windows.onload()与$(document).ready()的区别
2014/05/16 Javascript
自己动手手写jQuery插件总结
2015/01/20 Javascript
jQuery焦点控制图层展示延迟隐藏的方法
2015/03/09 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
2015/11/24 Javascript
微信小程序实现多宫格抽奖活动
2020/04/15 Javascript
30分钟用Node.js构建一个API服务器的步骤详解
2019/05/24 Javascript
node 解析图片二维码的内容代码实例
2019/09/11 Javascript
使用go和python递归删除.ds store文件的方法
2014/01/22 Python
详解使用python crontab设置linux定时任务
2016/12/08 Python
Python发送http请求解析返回json的实例
2018/03/26 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
2018/05/21 Python
python try except 捕获所有异常的实例
2018/10/18 Python
Python创建一个空的dataframe,并循环赋值的方法
2018/11/08 Python
Python3爬虫之urllib携带cookie爬取网页的方法
2018/12/28 Python
Python中函数的返回值示例浅析
2019/08/28 Python
wxpython绘制音频效果
2019/11/18 Python
使用python 将图片复制到系统剪贴中
2019/12/13 Python
基于Python共轭梯度法与最速下降法之间的对比
2020/04/02 Python
澳大利亚音乐商店:Bava’s Music City
2019/05/05 全球购物
打架检讨书100字
2014/01/19 职场文书
办公室主任主任岗位责任制
2014/02/11 职场文书
同志主要表现材料
2014/08/21 职场文书
2014年行政执法工作总结
2014/12/11 职场文书
校长师德表现自我评价
2015/03/04 职场文书
2019年个人工作总结范文(3篇)
2019/08/27 职场文书
python中的被动信息搜集
2021/04/29 Python
MySQL连表查询分组去重的实现示例
2021/07/01 MySQL