浅谈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删除特定文件的方法
Jul 30 Python
python利用urllib和urllib2访问http的GET/POST详解
Sep 27 Python
python实现微信远程控制电脑
Feb 22 Python
Python向Excel中插入图片的简单实现方法
Apr 24 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
Apr 27 Python
python Spyder界面无法打开的解决方法
Apr 27 Python
Laravel+Dingo/Api 自定义响应的实现
Feb 17 Python
Python类继承和多态原理解析
Feb 05 Python
python操作toml文件的示例代码
Nov 27 Python
分享unittest单元测试框架中几种常用的用例加载方法
Dec 02 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
Jan 22 Python
详解NumPy中的线性关系与数据修剪压缩
May 25 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
2006/12/14 PHP
PHP获取QQ达人QQ信息的方法
2015/03/05 PHP
摘自织梦CMS的HTTP文件下载类
2015/08/08 PHP
HR vs CL BO3 第一场 2.13
2021/03/10 DOTA
js 实现无缝滚动 兼容IE和FF
2009/07/15 Javascript
怎么清空javascript数组
2013/05/11 Javascript
JS动态添加Table的TR,TD实现方法
2015/01/28 Javascript
jQuery在页面加载时动态修改图片尺寸的方法
2015/03/20 Javascript
JavaScript DOM元素尺寸和位置
2015/04/13 Javascript
浅谈javascript事件取消和阻止冒泡
2015/05/26 Javascript
JavaScript的函数式编程基础指南
2016/03/19 Javascript
分享12个非常实用的JavaScript小技巧
2016/05/11 Javascript
用nodejs搭建websocket服务器
2017/01/23 NodeJs
Nodejs读取文件时相对路径的正确写法(使用fs模块)
2017/04/27 NodeJs
vue2.0全局组件之pdf详解
2017/06/26 Javascript
基于BootStrap multiselect.js实现的下拉框联动效果
2017/07/28 Javascript
Angular项目如何升级至Angular6步骤全纪录
2018/09/03 Javascript
浅谈VUE中演示v-for为什么要加key
2020/01/16 Javascript
jQuery冲突问题解决方法
2021/01/19 jQuery
Python检测QQ在线状态的方法
2015/05/09 Python
python生成式的send()方法(详解)
2017/05/08 Python
opencv python 2D直方图的示例代码
2018/07/20 Python
Python3解释器知识点总结
2019/02/19 Python
python读写配置文件操作示例
2019/07/03 Python
Django中使用CORS实现跨域请求过程解析
2019/08/05 Python
Django ORM多对多查询方法(自定义第三张表&ManyToManyField)
2019/08/09 Python
python计算无向图节点度的实例代码
2019/11/22 Python
Python的in,is和id函数代码实例
2020/04/18 Python
PyQt5 QDockWidget控件应用详解
2020/08/12 Python
css3 伪类选择器快速复习小结
2019/09/10 HTML / CSS
阿根廷首家户外用品制造商和经销商:Montagne
2018/02/12 全球购物
瑞典轮胎在线:Tirendo.se
2018/06/21 全球购物
学徒工职责
2014/03/06 职场文书
市场拓展计划书
2014/05/03 职场文书
2015年音乐教师个人工作总结
2015/05/20 职场文书
严以用权学习心得体会
2016/01/12 职场文书