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。
python">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)
。