pytorch小記(九):pytorch中創建指定形狀的張量: torch.empty
- 詳細解釋
- 1. 基本功能
- 2. 語法
- 3. 示例代碼
- 示例 1:創建一個 5 的未初始化張量
- 示例 2:創建一個 2×3 的未初始化張量
- 示例 3:指定數據類型和設備
- 4. 注意事項
torch.empty
是 PyTorch 中的一個函數,用于創建一個指定形狀的張量,但不會對張量中的數據進行初始化。這意味著生成的張量包含內存中隨機的“垃圾數據”,它們的值是不確定的。
詳細解釋
1. 基本功能
-
未初始化內存:
torch.empty
分配內存空間給張量,但不會對空間中的每個元素進行賦值初始化。結果是張量中的數據可能是內存中之前殘留的隨機值,因此其值是不可預測的。 -
用途:
當你需要一個張量來存放后續計算的結果時,可以使用torch.empty
以節省初始化的時間開銷。如果你馬上會用新的數據覆蓋這些值,使用torch.empty
是一種高效的方法。
2. 語法
torch.empty(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
- size:張量的形狀,可以是一個整數序列。例如
(3, 4)
表示創建一個 3 行 4 列的張量。 - dtype:數據類型,例如
torch.float32
、torch.int64
等。默認取決于 PyTorch 的全局設置。 - device:設備,可以是
"cpu"
或"cuda"
等,用于指定張量存放的位置。 - requires_grad:是否對張量計算梯度,默認為
False
。
3. 示例代碼
示例 1:創建一個 5 的未初始化張量
import torchx = torch.empty(5)
print(x)
輸出可能類似于(每次運行結果可能不同):
tensor([3.1183e-25, 1.2416e-42, 0.0000e+00, 0.0000e+00, 0.0000e+00])
示例 2:創建一個 2×3 的未初始化張量
import torchx = torch.empty(2, 3)
print(x)
輸出可能類似于(每次運行結果可能不同):
tensor([[4.6000e-41, 0.0000e+00, 2.8026e-45],[0.0000e+00, 4.6000e-41, 0.0000e+00]])
這里輸出的數字是內存中的隨機值。
示例 3:指定數據類型和設備
x = torch.empty((2, 3), dtype=torch.float32, device='cpu', requires_grad=True)
print(x)
這將創建一個 2×3 的張量,數據類型為 float32
,在 CPU 上,并且設置了 requires_grad=True
用于后續自動求導。
4. 注意事項
-
不要依賴初始值:
因為torch.empty
返回的張量中數據是未初始化的,所以在使用前必須顯式賦值或覆蓋這些數據,否則可能導致錯誤的計算結果。 -
與 torch.zeros/torch.ones 的區別:
如果你需要一個所有元素初始化為 0 的張量,可以使用torch.zeros
;如果需要初始化為 1,則使用torch.ones
。
而torch.empty
則更快,因為它不執行初始化操作,但其內容不確定。
torch.empty
是一種高效的張量創建方式,但必須謹慎使用,確保在使用張量之前已經對其內容進行了正確的賦值。