如何在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”分配新的記憶體位置,而就地操作則不會分配新的記憶體。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP