浅谈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 相关文章推荐
Win7上搭建Cocos2d-x 3.1.1开发环境
Jul 03 Python
python常见的格式化输出小结
Dec 15 Python
使用Python实现简单的服务器功能
Aug 25 Python
python利用dir函数查看类中所有成员函数示例代码
Sep 08 Python
tensorflow TFRecords文件的生成和读取的方法
Feb 06 Python
python+numpy按行求一个二维数组的最大值方法
Jul 09 Python
Python利用scapy实现ARP欺骗的方法
Jul 23 Python
python 扩展print打印文件路径和当前时间信息的实例代码
Oct 11 Python
Python MySQL 日期时间格式化作为参数的操作
Mar 02 Python
Python3如何使用tabulate打印数据
Sep 25 Python
Pandas的数据过滤实现
Jan 15 Python
详解appium自动化测试工具(monitor、uiautomatorviewer)
Jan 27 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+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
2012/07/15 PHP
php结合md5的加密解密算法实例
2016/09/30 PHP
Javascript isArray 数组类型检测函数
2009/10/08 Javascript
一些相见恨晚的 JavaScript 技巧
2010/04/25 Javascript
深入理解JavaScript系列(33):设计模式之策略模式详解
2015/03/03 Javascript
JS实现网页游戏中滑块响应鼠标点击移动效果
2015/10/19 Javascript
小巧强大的jquery layer弹窗弹层插件
2015/12/06 Javascript
javascript图片延迟加载实现方法及思路
2015/12/31 Javascript
js 弹出对话框(遮罩)透明,可拖动的简单实例
2016/07/11 Javascript
AngularJS基础 ng-href 指令用法
2016/08/01 Javascript
工作中比较实用的JavaScript验证和数据处理的干货(经典)
2016/08/03 Javascript
node网页分段渲染详解
2016/09/05 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
2016/10/13 Javascript
jQuery动态添加与删除tr行实例代码
2016/10/18 Javascript
微信公众号-获取用户信息(网页授权获取)实现步骤
2016/10/21 Javascript
Node.js中.pfx后缀文件的处理方法
2017/03/10 Javascript
JavaScript mixin实现多继承的方法详解
2017/03/30 Javascript
koa上传excel文件并解析的实现方法
2018/08/09 Javascript
vue+element UI实现树形表格
2020/12/29 Vue.js
[01:20]DOTA2 齐天大圣至宝动态展示
2016/12/13 DOTA
利用Python将时间或时间间隔转为ISO 8601格式方法示例
2017/09/05 Python
python适合人工智能的理由和优势
2019/06/28 Python
基于Python解密仿射密码
2019/10/21 Python
Python request使用方法及问题总结
2020/04/26 Python
结合CSS3的新特性来总结垂直居中的实现方法
2016/05/30 HTML / CSS
英国儿童家具专卖店:GLTC
2016/09/24 全球购物
彪马美国官网:PUMA美国
2017/03/09 全球购物
德国高端单身人士交友网站:ElitePartner
2018/12/02 全球购物
小区门卫管理制度
2014/01/29 职场文书
大学毕业感言50字
2014/02/07 职场文书
2014年度考核工作总结
2014/12/24 职场文书
可可西里观后感
2015/06/08 职场文书
高中班长竞选稿
2015/11/20 职场文书
css实现文章分割线样式的多种方法总结
2021/04/21 HTML / CSS
golang 如何用反射reflect操作结构体
2021/04/28 Golang
实现GO语言对数组切片去重
2022/04/20 Golang