浅谈PyTorch中in-place operation的含义

 更新时间:2020年06月27日 12:27:35   作者:York1996  
这篇文章主要介绍了浅谈PyTorch中in-place operation的含义,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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的含义就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • django实现类似触发器的功能

    django实现类似触发器的功能

    今天小编就为大家分享一篇django实现类似触发器的功能,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Python使用getpass库读取密码的示例

    Python使用getpass库读取密码的示例

    本篇文章主要介绍了Python使用getpass库读取密码的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • django框架防止XSS注入的方法分析

    django框架防止XSS注入的方法分析

    这篇文章主要介绍了django框架防止XSS注入的方法,结合实例形式分析了XSS攻击的原理及Django框架防止XSS攻击的相关操作技巧,需要的朋友可以参考下
    2019-06-06
  • cProfile Python性能分析工具使用详解

    cProfile Python性能分析工具使用详解

    这篇文章主要介绍了cProfile Python性能分析工具使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • 使用AJAX和Django获取数据的方法实例

    使用AJAX和Django获取数据的方法实例

    这篇文章主要给大家介绍了关于使用AJAX和Django获取数据的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Python XlsxWriter模块Chart类用法实例分析

    Python XlsxWriter模块Chart类用法实例分析

    这篇文章主要介绍了Python XlsxWriter模块Chart类用法,结合实例形式分析了Python XlsxWriter模块Chart类功能、图表绘制常用方法及相关操作注意事项,需要的朋友可以参考下
    2019-03-03
  • 关于Python中的闭包详解

    关于Python中的闭包详解

    大家好,本篇文章主要讲的是关于Python中的闭包详解,感兴趣的同学感快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • py中的目录与文件判别代码

    py中的目录与文件判别代码

    python中的判别目录和文件的脚本
    2008-07-07
  • Flask框架中的session设置详解

    Flask框架中的session设置详解

    Flask是一个使用Python编写的轻量级Web应用框架。其WSGI工具箱采用Werkzeug,模板引擎则使用 Jinja2 。Flask使用BSD授权。Flask也被称为 “microframework”,因为它使用简单的核心,用extension增加其他功能
    2023-02-02
  • Pandas实现数据类型转换的一些小技巧汇总

    Pandas实现数据类型转换的一些小技巧汇总

    这篇文章主要给大家汇总介绍了关于Pandas实现数据类型转换的一些小技巧,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05

最新评论