一、Tensor
Tensor,中文叫做张量,它是Pytorch中最基本的数据类型,同时也是最重要的数据类型
二、数学含义
在数学中,标量是只有大小没有方向的量。例如,1,2,3等。向量是既有大小又有方向的量。例如, 𝑣=(1,2,3) 。矩阵是由多个向量组成的一堆数字。例如, 𝐴=[123456789] .
向量其实也可以看成矩阵,可以把它看成1*x列的矩阵,或者x*1列的矩阵。
那么,张量其实是标量、向量和矩阵的统称。也就是说,标量、向量和矩阵都是张量的特例:
标量是零维张量、向量是一维张量、矩阵是二维张量。当然还有3维张量,4维张量,等等。
其中,矩阵是三维张量下的一个二维切面。具体如下图所示。
三、Tensor的基本创建方法
使用方法 | 说明 |
torch.Tensor() | 创建一个4*4的矩阵 |
torch.Tensor(list) | 使用Python中的列表创建Tensor |
torch.zeros() | 创建元素全为0的Tensor |
torch.eye() | 创建对角线位置元素全为1、其它位置全为0 |
torch.ones() | 创建元素全为1 |
torch.rand() | 创建元素初始化在[0,1)区间的随机数 |
torch.arange() | 创建一个在区间内按指定步长递增的一维(前两个区间,第三为步长) |
torch.eye() | 对角线位置元素全为1 |
torch.from_numpy() | 将Numpy的ndarray对象转换为Tensor |
torch.linspace() | 创建一个区间内被均匀划分的一维Tensor |
torch.randn() | 创建服从标准正态分布的一组随机数Tensor |
1.torch.Tensor()函数创建
在Pytorch中穿件Tensor,需要导入torch包,首先在pycharm中导入torch包
import torch
然后使用最基本的方法torch.Tensor()方法创建Tensor。这里我们创建一个4*4的矩阵,也就是二维张量。
import torch
x = torch.Tensor(4,4)
print(x)
输出:
tensor([[3.4175e+02, 8.9123e-43, 3.4174e+02, 8.9123e-43],
[3.4170e+02, 8.9123e-43, 3.4170e+02, 8.9123e-43],
[3.4175e+02, 8.9123e-43, 3.4175e+02, 8.9123e-43],
[3.4172e+02, 8.9123e-43, 3.4172e+02, 8.9123e-43]])
可以看到,我们虽然没有对矩阵x进行初始化,但是它已经有了值,下面我们看一下,它的这个值是什么类型的。
print(x.type())
输出:
'torch.FloatTensor'
print(x.dtype())
输出:
torch.float32
从x.type()返回的变量类型可以看出,torch.Tensor()默认类型是torch.FloatTensor,而该类型的dtype为32为的浮点数。下图是pytorch的8种数据类型
下面使用torch.DoubleTensor()函数创建一个1*2*5的64位浮点数的Tensor
x = torch.DoubleTensor(1,2,5)
print(x)
输出:
tensor([[[1.9582e-306, 2.2252e-306, 8.4561e-307, 1.4242e-306, 1.1126e-306],
[1.1126e-306, 1.4241e-306, 7.5660e-307, 6.2306e-307, 8.4561e-307]]],
dtype=torch.float64)
2.torch.Tensor()使用List创建
在这里我们使用Python中的列表创建Tensor。
list = [[1,2,3],[4,5,6],[7,8,9]]
torch.Tensor(list)
输出:
tensor([[1., 2., 3.],
[4., 5., 6.],
[7., 8., 9.]])
3.快速创建法
3.1 torch.zeros()函数:全为0
用于创建元素全为0的Tensor.示例如下:
>>> torch.zeros(3,4)
tensor([[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.]])
3.2 torch.eye()函数:对角线全为1、其它全为0
用于创建对角线位置元素全为1、其它位置全为0的Tensor.示例如下:
>>> torch.eye(4,4)
tensor([[1., 0., 0., 0.],[0., 1., 0., 0.],[0., 0., 1., 0.],[0., 0., 0., 1.]])
3.3 torch.ones()函数:全为1
用于创建元素全为1的Tensor.示例如下:
>>> torch.ones(4,4)
tensor([[1., 1., 1., 1.],[1., 1., 1., 1.],[1., 1., 1., 1.],[1., 1., 1., 1.]])
3.4 torch.rand()函数:[0,1)区间的随机数
用于创建元素初始化在[0,1)区间的随机数的Tensor.示例如下:
>>> torch.rand(4,4)
tensor([[0.6398, 0.1484, 0.5834, 0.5358],[0.1273, 0.9559, 0.8656, 0.4693],[0.6571, 0.2421, 0.8601, 0.0044],[0.7654, 0.8349, 0.8755, 0.5225]])
3.5 torch.arange()函数:在区间内按指定步长递增的一维
用于创建一个在区间内按指定步长递增的一维的Tensor.前两个参数指定区间范围,第三个参数指定步长。示例如下:
>>> torch.arange(1,4,0.5)
tensor([1.0000, 1.5000, 2.0000, 2.5000, 3.0000, 3.5000])
还有一些其它函数的创建方法,如下面所示:
3.6 torch.eye() 对角线位置元素全为1
3.7 torch.from_numpy() 将Numpy的ndarray对象转换为Tensor;
3.8 torch.linspace() 创建一个区间内被均匀划分的一维Tensor;
3.9 torch.randn创建服从标准正态分布的一组随机数Tenso。