torch.tensor
通過復制數據構造一個張量
- (構造出的張量是一個沒有
自動微分(autograd )
歷史的張量,也稱為葉張量
,參考Autograd mechanics)。
torch.tensor(data, *, dtype=None, device=None, requires_grad=False, pin_memory=False)
→ Tensor
data
– 用于創建張量的初始數據。可以是列表、元組、NumPyndarray
、標量和其他類型。dtype
(torch.dtype,可選)– 返回張量的所需數據類型。默認值:如果為 None,則從數據中推斷數據類型。pytorch中的數據類型device
(torch.device,可選)- 構造的張量的設備。如果 None 且 data 是張量,則使用 data 設備。如果 None 且 data 不是張量,則結果張量在當前設備上構造。requires_grad
(bool, 可選)– 是否有autograd。默認值:False(沒有)。pin_memory
(bool,可選) – 返回的張量將在固定內存中分配。僅適用于 CPU 張量。默認值:False。
import torch# 創建一個空張量(大小為0)
tensor_0=torch.tensor([])
print("空張量:", tensor_0)# 創建一個一維張量(向量)
tensor_1d = torch.tensor([1, 2, 3, 4, 5])
print("一維張量:", tensor_1d)# 創建一個二維張量(矩陣)
tensor_2d = torch.tensor([[1.1, 2.2], [3.3, 4.4]])
print("二維張量:", tensor_2d)# 創建一個三維張量
tensor_3d = torch.tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print("三維張量:", tensor_3d)# 創建一個序列,并將其轉換為張量
sequence = [1, 2, 3]
tensor_from_list = torch.tensor(sequence)
print("從列表創建的張量:", tensor_from_list)# 創建一個張量,并指定是否需要梯度
tensor_requires_grad = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
print("需要梯度的張量:", tensor_requires_grad)# 對需要梯度的張量進行操作,并計算梯度
tensor_requires_grad[0].backward()
print("梯度:", tensor_requires_grad.grad)# 創建一個張量,并指定數據類型和設備
tensor_dtype_device = torch.tensor([0.1, 0.2, 0.3], dtype=torch.float64, device=torch.device('cuda:0'))
print("指定數據類型和設備的張量:", tensor_dtype_device)
'''output
空張量: tensor([])
一維張量: tensor([1, 2, 3, 4, 5])
二維張量: tensor([[1.1000, 2.2000],[3.3000, 4.4000]])
三維張量: tensor([[[1, 2],[3, 4]],[[5, 6],[7, 8]]])
從列表創建的張量: tensor([1, 2, 3])
需要梯度的張量: tensor([1., 2., 3.], requires_grad=True)
梯度: tensor([1., 0., 0.])
指定數據類型和設備的張量: tensor([0.1000, 0.2000, 0.3000], device='cuda:0', dtype=torch.float64)
'''
注意
當使用張量時,為了可讀性,更傾向使用torch.Tensor.clone()
, torch.Tensor.detach()
和torch.Tensor.requires_grad_()
。
設t為張量,torch.tensor(t)
等價于t.clone().detach()
和torch.tensor(t, requires_grad=True)
等價于t.clone().detach().requires_grad_(True)
。