如何在PyTorch中执行就地操作?


就地操作直接更改张量的內容,无需复制。因为它不创建输入的副本,所以在处理高维数据时可以减少内存使用。就地操作有助于减少GPU内存的使用。

在PyTorch中,就地操作总是后缀为"_",例如add_()、mul_()等。

步骤

要执行就地操作,可以按照以下步骤进行:

  • 导入所需的库。所需的库是torch。

  • 定义/创建要执行就地操作的张量。

  • 执行普通就地操作,以查看它们之间的区别。

  • 显示在普通和就地操作中获得的张量。

示例1

下面的Python程序突出了普通加法和就地加法之间的区别。在就地加法中,第一个操作数“x”的值会改变;而在普通加法中,它保持不变。

# import required library
import torch

# create two tensors x and y
x = torch.tensor(4)
y = torch.tensor(3)
print("x=", x.item())
print("y=", y.item())

# Normal addition
z = x.add(y)
print("Normal Addition x:",x.item())

# In-place addition
z = x.add_(y)
print("In-place Addition x:",x.item())

输出

x = 4
y = 3
Normal Addition x: 4
In-place Addition x: 7

在上面的程序中,两个张量x和y相加。在普通加法运算中,x的值不变,但在就地加法运算中,它的值改变了。

示例2

下面的Python程序显示了普通加法和就地加法运算在内存分配方面的区别。

# import required library
import torch

# create two tensors x and y
x = torch.tensor(4)
y = torch.tensor(3)
print("id(x)=", id(x))

# Normal addition
z = x.add(y)
print("Normal Addition id(z):",id(z))

# In-place addition
z = x.add_(y)
print("In-place Addition id(z):",id(z))

输出

id(x)= 63366656
Normal Addition id(z): 63366080
In-place Addition id(z): 63366656

在上面的程序中,普通操作为“z”分配新的内存位置,而就地操作则不会分配新的内存。

更新于:2021年12月6日

1K+ 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告