浅谈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的web.py框架下的application.py模块
May 02 Python
Python IDE PyCharm的基本快捷键和配置简介
Nov 04 Python
Python数据库的连接实现方法与注意事项
Feb 27 Python
浅谈Pandas 排序之后索引的问题
Jun 07 Python
python中for循环把字符串或者字典添加到列表的方法
Jul 20 Python
nginx黑名单和django限速,最简单的防恶意请求方法分享
Aug 09 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
Aug 15 Python
解决django model修改添加字段报错的问题
Nov 18 Python
Python任务调度模块APScheduler使用
Apr 15 Python
Python collections模块的使用方法
Oct 09 Python
python 爬虫网页登陆的简单实现
Nov 30 Python
python函数指定默认值的实例讲解
Mar 29 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分页原理及实现
2007/01/02 PHP
PHP 操作文件的一些FAQ总结
2009/02/12 PHP
php适配器模式介绍
2012/08/14 PHP
php读取大文件示例分享(文件操作类)
2014/04/13 PHP
如何让thinkphp在模型中自动完成session赋值小教程
2014/09/05 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
2014/11/28 PHP
php使用parse_url和parse_str解析URL
2015/02/22 PHP
基于PHP实现的事件机制实例分析
2015/06/18 PHP
php 基础函数
2017/02/10 PHP
ThinkPHP 3.2.3实现加减乘除图片验证码
2018/12/05 PHP
Extjs Ajax 乱码问题解决方案
2009/04/15 Javascript
两个多选select(multiple左右)添加、删除选项和取值实例
2014/05/12 Javascript
JS通过ajax动态读取xml文件内容的方法
2015/03/24 Javascript
js获取form的方法
2015/05/06 Javascript
js实现数组转换成json
2015/06/26 Javascript
jQuery实现图片轮播特效代码分享
2015/09/15 Javascript
JavaScript数据结构与算法之链表
2016/01/29 Javascript
JS实现移动端实时监听输入框变化的实例代码
2017/04/12 Javascript
vue 2.0封装model组件的方法
2017/08/03 Javascript
jQuery访问json文件中数据的方法示例
2019/01/28 jQuery
vue中npm包全局安装和局部安装过程
2019/09/03 Javascript
详解JavaScript修改注册表的方法
2020/01/05 Javascript
Vue基于iview实现登录密码的显示与隐藏功能
2020/03/06 Javascript
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
[06:45]DOTA2-DPC中国联赛 正赛 Magma vs LBZS 选手采访
2021/03/11 DOTA
简单介绍Python中的几种数据类型
2016/01/02 Python
python中单下划线_的常见用法总结
2018/07/10 Python
flask框架jinja2模板与模板继承实例分析
2019/08/01 Python
Python依赖包整体迁移方法详解
2019/08/15 Python
Django Model层F,Q对象和聚合函数原理解析
2020/11/12 Python
联想英国官网:Lenovo英国
2019/07/17 全球购物
完美实现CSS垂直居中的11种方法
2021/03/27 HTML / CSS
思想品德自我评价
2014/02/04 职场文书
安全伴我行演讲稿
2014/09/04 职场文书
2015年父亲节寄语
2015/03/23 职场文书
大学生暑期社会实践的个人总结!
2019/07/17 职场文书