Tensor 是包含单一数据类型(dtype)元素的多维矩阵。
Torch 定义了 10 种具有 CPU 和 GPU 变体的张量类型。
torch.Tensor 是默认张量类型 (torch.FloatTensor) 的别名。
dtype是指Tensor中的数据的数据类型,包含torch.float\torch.double\torch.complex32\torch.int等类型,其中每种类型又有cpu、cuda两种变体。
初始化和基本操作:
>>> torch.tensor([[1., -1.], [1., -1.]])
tensor([[ 1.0000, -1.0000],
[ 1.0000, -1.0000]])
>>> torch.tensor(np.array([[1, 2, 3], [4, 5, 6]]))
tensor([[ 1, 2, 3],
[ 4, 5, 6]])
torch.tensor()总是复制data。如果您有一个张量 data并且只想更改其requires_grad标志,请使用 requires_grad_()或 detach()以避免复制。如果您有一个 numpy 数组并且想要避免复制,请使用 torch.as_tensor().
可以通过指定 torch.dtype and/or torch.device传递给构造函数或张量创建操作来构造特定数据类型的张量:
>>> torch.zeros([2, 4], dtype=torch.int32)
tensor([[ 0, 0, 0, 0],
[ 0, 0, 0, 0]], dtype=torch.int32)
>>> cuda0 = torch.device('cuda:0')
>>> torch.ones([2, 4], dtype=torch.float64, device=cuda0)
tensor([[ 1.0000, 1.0000, 1.0000, 1.0000],
[ 1.0000, 1.0000, 1.0000, 1.0000]], dtype=torch.float64, device='cuda:0')
索引:
>>> x = torch.tensor([[1, 2, 3], [4, 5, 6]])
>>> print(x[1][2])
tensor(6)
>>> x[0][1] = 8
>>> print(x)
tensor([[ 1, 8, 3],
[ 4, 5, 6]])
使用 torch.Tensor.item() 从包含单个值的张量中获取 Python 数字:
>>> x = torch.tensor([[1]])
>>> x
tensor([[ 1]])
>>> x.item()
1
>>> x = torch.tensor(2.5)
>>> x
tensor(2.5000)
>>> x.item()
2.5
计算梯度:
>>> x = torch.tensor([[1., -1.], [1., 1.]], requires_grad=True)
>>> out = x.pow(2).sum()
>>> out.backward()
>>> x.grad
tensor([[ 2.0000, -2.0000],
[ 2.0000, 2.0000]])