浅谈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 通过pip安装Django详细介绍
Apr 28 Python
Python内置函数reversed()用法分析
Mar 20 Python
tensorflow学习笔记之mnist的卷积神经网络实例
Apr 15 Python
django加载本地html的方法
May 27 Python
python的继承知识点总结
Dec 10 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
Dec 15 Python
python 发送json数据操作实例分析
Oct 15 Python
Python操作redis和mongoDB的方法
Dec 19 Python
TFRecord文件查看包含的所有Features代码
Feb 17 Python
基于Python爬取51cto博客页面信息过程解析
Aug 25 Python
python zip()函数的使用示例
Sep 23 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
Nov 17 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 5.0对象模型深度探索之属性和方法
2008/03/27 PHP
php 404错误页面实现代码
2009/06/22 PHP
PHP全概率运算函数(优化版) Webgame开发必备
2011/07/04 PHP
谈谈关于php的优点与缺点
2013/04/11 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
2018/12/20 PHP
NodeJS框架Express的模板视图机制分析
2011/07/19 NodeJs
JS正则表达式大全(整理详细且实用)
2013/11/14 Javascript
JS数组(Array)处理函数整理
2014/12/07 Javascript
javaScript中Math()函数注意事项
2015/06/18 Javascript
原生JS实现美图瀑布流布局赏析
2015/09/07 Javascript
JavaScript中的this,call,apply使用及区别详解
2016/01/29 Javascript
jQuery soColorPacker 网页拾色器
2016/06/22 Javascript
JQuery控制图片由中心点逐渐放大效果
2016/06/26 Javascript
详解vue slot插槽的使用方法
2017/06/13 Javascript
jquery 键盘事件的使用方法详解
2017/09/13 jQuery
Vue.js递归组件构建树形菜单
2017/12/24 Javascript
Vue2 监听属性改变watch的实例代码
2018/08/27 Javascript
JavaScript前端开发时数值运算的小技巧
2020/07/28 Javascript
[40:03]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#1EHOME VS Archon
2016/03/02 DOTA
[01:05:52]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第一场 2月2日
2021/03/11 DOTA
用Python解析XML的几种常见方法的介绍
2015/04/09 Python
在cmd中运行.py文件: python的操作步骤
2018/05/12 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
Python实现TCP通信的示例代码
2019/09/09 Python
使用Python实现牛顿法求极值
2020/02/10 Python
广告语设计及教案
2014/03/21 职场文书
党的群众路线教育实践活动公开承诺书
2014/03/28 职场文书
寄语学生的话
2014/04/10 职场文书
低碳环保倡议书
2014/04/14 职场文书
促销活动总结报告
2014/04/26 职场文书
整改报告怎么写
2014/11/06 职场文书
2015年保险公司个人工作总结
2015/05/22 职场文书
跟班学习心得体会(共6篇)
2016/01/23 职场文书
Ajax异步刷新功能及简单案例
2021/11/20 Javascript
SpringBoot系列之MongoDB Aggregations用法详解
2022/02/12 MongoDB