首页 文章资讯内容详情

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

2026-06-02 1 花语

就地操作直接更改张量的内容,而无需复制它。由于它不创建输入的副本,因此在处理高维数据时减少了内存使用。就地操作有助于使用更少的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("正常加法x:",x.item()) # In-place addition z = x.add_(y) print("In-place Addition x:",x.item())输出结果x = 4 y = 3 正常加法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”分配新的内存位置,而就地操作不分配新的内存。