如何在 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("正常加法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”分配新的内存位置,而就地操作不分配新的内存。