浅谈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单链表的简单实现方法
Sep 23 Python
python实现基于两张图片生成圆角图标效果的方法
Mar 26 Python
python使用WMI检测windows系统信息、硬盘信息、网卡信息的方法
May 15 Python
Python+matplotlib实现填充螺旋实例
Jan 15 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
Jul 31 Python
python2与python3共存问题的解决方法
Sep 18 Python
python验证身份证信息实例代码
May 06 Python
Python 把序列转换为元组的函数tuple方法
Jun 27 Python
python将字典列表导出为Excel文件的方法
Sep 02 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
Sep 04 Python
Python环境搭建过程从安装到Hello World
Feb 05 Python
自动在Windows中运行Python脚本并定时触发功能实现
Sep 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
discuz免激活同步登入代码修改方法(discuz同步登录)
2013/12/24 PHP
php实现复制移动文件的方法
2015/07/29 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
2016/11/05 PHP
破解Session cookie的方法
2006/07/28 Javascript
一个不错的用JavaScript实现的UBB编码函数
2007/03/09 Javascript
SWFObject Flash js调用类
2008/07/08 Javascript
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
2010/03/02 Javascript
jquery给图片添加鼠标经过时的边框效果
2013/11/12 Javascript
js获取当前日期前七天的方法
2015/02/28 Javascript
Redis基本知识、安装、部署、配置笔记
2015/03/05 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
2015/08/25 Javascript
Bootstrap每天必学之前端开发框架
2015/11/19 Javascript
详解JavaScript的另类写法
2016/04/11 Javascript
基于bootstrap的文件上传控件bootstrap fileinput
2016/12/23 Javascript
微信小程序 解析网页内容详解及实例
2017/02/22 Javascript
bootstrap table 多选框分页保留示例代码
2017/03/08 Javascript
[js高手之路]图解javascript的原型(prototype)对象,原型链实例
2017/08/28 Javascript
vue-cli项目中怎么使用mock数据
2017/09/27 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
2018/11/30 Javascript
python实现从网络下载文件并获得文件大小及类型的方法
2015/04/28 Python
python实现在遍历列表时,直接对dict元素增加字段的方法
2019/01/15 Python
Python Web框架之Django框架文件上传功能详解
2019/08/16 Python
Django如何使用jwt获取用户信息
2020/04/21 Python
Pycharm 2020.1 版配置优化的详细教程
2020/08/07 Python
CSS3之边框多颜色Border-color属性使用示例
2013/10/11 HTML / CSS
New Balance法国官方网站:购买鞋子和服装
2019/09/01 全球购物
新书吧创业计划书
2014/01/31 职场文书
医院检讨书范文
2014/02/01 职场文书
集体备课反思
2014/02/12 职场文书
国际语言毕业生求职信
2014/07/08 职场文书
劳模事迹材料范文
2014/12/24 职场文书
煤矿安全生产工作总结
2015/08/13 职场文书
新手开公司创业注意事项有哪些?
2019/07/29 职场文书
解决Jupyter-notebook不弹出默认浏览器的问题
2021/03/30 Python
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android
numpy array找出符合条件的数并赋值的示例代码
2022/06/01 Python