如何在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”分配新的記憶體位置,而就地操作則不會分配新的記憶體。
廣告