浅谈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爬虫之urllib2使用指南
Nov 05 Python
python统计一个文本中重复行数的方法
Nov 19 Python
用Python编写分析Python程序性能的工具的教程
Apr 01 Python
python解析xml文件实例分析
May 27 Python
Python数组遍历的简单实现方法小结
Apr 27 Python
Python实现简单网页图片抓取完整代码实例
Dec 15 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
Sep 25 Python
Django ORM 查询表中某列字段值的方法
Apr 30 Python
python算的上脚本语言吗
Jun 22 Python
opencv 图像滤波(均值,方框,高斯,中值)
Jul 08 Python
Python hashlib和hmac模块使用方法解析
Dec 08 Python
python 30行代码实现蚂蚁森林自动偷能量
Feb 08 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 操作符与控制结构
2012/03/07 PHP
CI(CodeIgniter)框架配置
2014/06/10 PHP
Javascript实现重力弹跳拖拽运动效果示例
2013/06/28 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
仿百度联盟对联广告实现代码
2014/08/30 Javascript
原生js仿jq判断当前浏览器是否为ie,精确到ie6~8
2014/08/30 Javascript
jQuery表单域属性过滤器用法分析
2015/02/10 Javascript
详解AngularJS中$http缓存以及处理多个$http请求的方法
2016/02/06 Javascript
针对JavaScript中this指向的简单理解
2016/08/26 Javascript
JQuery统计input和textarea文字输入数量(代码分享)
2016/12/29 Javascript
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
2018/01/08 Javascript
vue如何引入sass全局变量
2018/06/28 Javascript
vue.js实现插入数值与表达式的方法分析
2018/07/06 Javascript
详解React 的几种条件渲染以及选择
2018/10/23 Javascript
浅谈bootstrap layer.open中end的使用方法
2019/09/12 Javascript
Vue.js组件通信之自定义事件详解
2019/10/19 Javascript
Python中的面向对象编程详解(上)
2015/04/13 Python
Python常用内置模块之xml模块(详解)
2017/05/23 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
2017/08/05 Python
全面分析Python的优点和缺点
2018/02/07 Python
Python 打印中文字符的三种方法
2018/08/14 Python
Python实现的读取/更改/写入xml文件操作示例
2018/08/30 Python
Python3之不使用第三方变量,实现交换两个变量的值
2019/06/26 Python
keras中的History对象用法
2020/06/19 Python
美国内衣第一品牌:Hanes(恒适)
2016/07/29 全球购物
施华洛世奇水晶荷兰官方网站:SWAROVSKI荷兰
2017/05/12 全球购物
香港礼品网站:GiftU eshop
2017/09/01 全球购物
激光脱毛、蓝光和护肤:Tria Beauty
2019/03/28 全球购物
图库照片、免版税图片、矢量艺术、视频片段:Depositphotos
2019/08/02 全球购物
Java提供了哪些企业应用编程接口
2015/02/13 面试题
什么是虚拟内存?虚拟内存有什么优势?
2012/02/19 面试题
竞聘副主任科员演讲稿
2014/01/11 职场文书
三年级数学教学反思
2014/01/31 职场文书
天地会口号
2014/06/17 职场文书
简单的离婚协议书范本
2014/11/16 职场文书