时间:2021-05-22
in-place operation在pytorch中是指改变一个tensor的值的时候,不经过复制操作,而是直接在原来的内存上改变它的值。可以把它成为原地操作符。
在pytorch中经常加后缀“_”来代表原地in-place operation,比如说.add_() 或者.scatter()。python里面的+=,*=也是in-place operation。
下面是正常的加操作,执行结束加操作之后x的值没有发生变化:
import torchx=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 torchx=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的含义就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
快速排序,又称划分交换排序。以分治法为策略实现的快速排序算法。本文主要要谈的是利用javascript实现in-place思想的快速排序分治法:在计算机科学中,
numpy中的ndarray转化成pytorch中的tensor:torch.from_numpy()pytorch中的tensor转化成numpy中的ndar
pytorch中的gather函数pytorch比tensorflow更加编程友好,所以准备用pytorch试着做最近要做的一些实验。立个flag开始学习pyt
我用的是Anaconda3,用spyder编写pytorch的代码,在Anaconda3中新建了一个pytorch的虚拟环境(虚拟环境的名字就叫pytorch)
如下所示:importtorchfromtorch.autogradimportVariableimportnumpyasnp'''pytorch中Variab