浅谈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中还原JavaScript的escape函数编码后字符串的方法
Aug 22 Python
python进程管理工具supervisor使用实例
Sep 17 Python
python输入错误密码用户锁定实现方法
Nov 27 Python
对numpy中array和asarray的区别详解
Apr 17 Python
对python-3-print重定向输出的几种方法总结
May 11 Python
Python 实现微信防撤回功能
Apr 29 Python
python3+django2开发一个简单的人员管理系统过程详解
Jul 23 Python
django框架面向对象ORM模型继承用法实例分析
Jul 29 Python
python实现按关键字筛选日志文件
Dec 24 Python
python中shell执行知识点
May 06 Python
如何解决安装python3.6.1失败
Jul 01 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
Feb 04 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
Fatal error: Call to undefined function curl_init()解决方法
2010/04/09 PHP
php redis实现对200w用户的即时推送
2017/03/04 PHP
PHP htmlspecialchars()函数用法与实例讲解
2019/03/08 PHP
Aster vs KG BO3 第三场2.18
2021/03/10 DOTA
准确获得页面、窗口高度及宽度的JS
2006/11/26 Javascript
javascript之卸载鼠标事件的代码
2007/05/14 Javascript
innerText和innerHTML 一些问题分析
2009/05/18 Javascript
Javascript 两个窗体之间传值实现代码
2009/09/25 Javascript
js+css实现上下翻页相册代码分享
2015/08/18 Javascript
非常实用的js验证框架实现源码 附原理方法
2016/06/08 Javascript
轻松实现jquery选项卡切换效果
2016/10/10 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
JS中位置与大小的获取方法
2016/11/22 Javascript
Webpack打包慢问题的完美解决方法
2017/03/16 Javascript
jQuery实现图片简单轮播功能示例
2018/08/13 jQuery
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
Vue高版本中一些新特性的使用详解
2018/09/25 Javascript
JavaScript组合模式---引入案例分析
2020/05/23 Javascript
原生js实现五子棋游戏
2020/05/28 Javascript
jquery实现淡入淡出轮播图效果
2020/12/13 jQuery
js实现随机点名
2021/01/19 Javascript
[54:27]TNC vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python实现拼接多张图片的方法
2014/12/01 Python
Python中操作文件之write()方法的使用教程
2015/05/25 Python
各个系统下的Python解释器相关安装方法
2015/10/12 Python
Python 经典面试题 21 道【不可错过】
2018/09/21 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
python将excel转换为csv的代码方法总结
2019/07/03 Python
python读取excel进行遍历/xlrd模块操作
2020/07/12 Python
Joules官网:女士、男士和儿童服装和鞋类
2018/10/23 全球购物
无故旷工检讨书
2014/01/26 职场文书
作文评语集锦大全
2014/04/23 职场文书
介绍信怎么写
2015/01/30 职场文书
让子弹飞观后感
2015/06/11 职场文书
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
2021/05/25 Vue.js
swagger如何返回map字段注释
2021/07/03 Java/Android