如何在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”分配新的内存位置,而就地操作则不会分配新的内存。
广告