张量是PyTorch最基本的操作对象,英文名称为 Tensor,它表示的是一个多维的矩阵。比如零维是一个点,一维就是向量,二维就是一般的矩阵,多维就相当于一个多维的数组,这和numpy是对应的,而且 Pytorch 的 Tensor 可以和 numpy 的ndarray相互转换,唯一不同的是 Pytorch可以在GPU上运行,而numpy的 ndarray 只能在CPU上运行。
1、张量的数据类型
常用的不同数据类型的 Tensor 如下:
32位浮点型:torch.FloatTensor
64位浮点型:torch.DoubleTensor
16位整型:torch.ShortTensor
32位整型:torch.IntTensor
64位整型:torch.LongTensor
2、创建张量Tensor
我们可以通过下面这样的方式来定义一个三行两列给定元素的矩阵,并且显示出矩阵的元素和大小:
import torch
a = torch.Tensor([[2,3], [4,8], [7, 9]])
print('a is: {}'.format(a))
print('a size is {}'.format(a.size()))
需要注意的是torch.Tensor默认的是torch.FloatTensor数据类型
当然,也可以定义我们想要的数据类型,就像下面这样:
import torch
b = torch.LongTensor([[2, 3],[4, 8],[7, 9]])
print('b is: {}'.format(b))
print('b size is {}'.format(b.size()))
另外,也可以创建一个全是 0 的空Tensor或者取一个正太分布作为随机初始值:
import torch
c = torch.zeros((3, 2))
print('zero tensor: {}'.format(c))
d = torch.randn((3,2))
print('noraml randon is : {}'.format(d))
3、张量Tensor与多维数组ndarray相互转换
除此之外,我们还可以在Tensor与numpy.ndarray之间相互转换:
import torch
import numpy as np
b = torch.LongTensor([[2, 3],[4, 8],[7, 9]])
numpy_b = b.numpy()
print('cover to many is \n {}'.format(numpy_b))
e = np.array([[2, 3],[4, 5]])
torch_e = torch.from_numpy(e)
print('from numpy tp torch.Tensor is {}'.format(torch_e))
f_torch_e = torch_e.float()
print('change data type to float tensor: {}'.format(f_torch_e))
4、GPU 加速
如果你的电脑支持GPU加速,还可以将 Tensor 放到GPU上。首先通过torch.cuda.is_available()判断一下是否支持GPU,如果想把tensor a放到GPU上,只需a.cuda()就能将tensor a放到GPU上了。
import torch
a = torch.Tensor([[2,3], [4,8], [7, 9]])
if torch.cuda.is_available():
a_cuda = a.cuda()
print(a_cuda)