浅谈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 09 Python
Python中还原JavaScript的escape函数编码后字符串的方法
Aug 22 Python
python实现封装得到virustotal扫描结果
Oct 05 Python
Python自定义scrapy中间模块避免重复采集的方法
Apr 07 Python
Python获取SQLite查询结果表列名的方法
Jun 21 Python
python制作小说爬虫实录
Aug 14 Python
Python序列循环移位的3种方法推荐
Apr 09 Python
Ubuntu+python将nii图像保存成png格式
Jul 18 Python
关于TensorFlow新旧版本函数接口变化详解
Feb 10 Python
Python制作简易版小工具之计算天数的实现思路
Feb 13 Python
python模拟实现分发扑克牌
Apr 22 Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
Jan 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
探讨php中遍历二维数组的几种方法详解
2013/06/08 PHP
PHP生成Gif图片验证码
2013/10/27 PHP
php+highchats生成动态统计图
2014/05/21 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
2019/09/30 PHP
jQuery 1.2.x 升? 1.3.x 注意事项
2009/05/06 Javascript
javascript 匿名函数的理解(透彻版)
2010/01/28 Javascript
ExtJs 3.1 XmlTreeLoader Example Error
2010/02/09 Javascript
深入理解Javascript闭包 新手版
2010/12/28 Javascript
别了 JavaScript中的isXX系列
2012/08/01 Javascript
DWZ刷新dialog解决方法
2013/03/03 Javascript
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
2015/01/01 NodeJs
JS数组array元素的添加和删除方法代码实例
2015/06/01 Javascript
web前端开发JQuery常用实例代码片段(50个)
2015/08/28 Javascript
学习jQuey中的return false
2015/12/18 Javascript
EasyUI折叠表格层次显示detailview详解及实例
2016/12/28 Javascript
JSON与js对象序列化实例详解
2017/03/16 Javascript
简单实现js进度条加载效果
2020/03/25 Javascript
微信小程序实现单选选项卡切换效果
2020/06/19 Javascript
详解javascript对数组和json数组的操作
2019/04/15 Javascript
vue 子组件和父组件传值的示例
2020/09/11 Javascript
vue keep-alive实现多组件嵌套中个别组件存活不销毁的操作
2020/10/30 Javascript
js调用网络摄像头的方法
2020/12/05 Javascript
[47:43]Alliance vs KG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
python发腾讯微博代码分享
2014/01/10 Python
Python3内置模块之json编解码方法小结【推荐】
2020/12/09 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
2019/10/24 Python
pandas factorize实现将字符串特征转化为数字特征
2019/12/19 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
基于Django快速集成Echarts代码示例
2020/12/01 Python
世界上最大的售后摩托车零配件超市:J&P Cycles
2017/12/08 全球购物
如何开启linux的ssh服务
2013/06/03 面试题
《月迹》教学反思
2014/02/19 职场文书
个人授权委托书范本
2014/04/03 职场文书
优秀学生干部先进事迹材料
2014/05/26 职场文书
软件研发工程师岗位职责
2014/09/30 职场文书
任命通知范文
2015/04/21 职场文书