1 Tensor介绍
Tensor 是 tensorflow 的一个基础概念——张量。 是具有统一类型(称为 dtype
)的多维数组。
Tensorflow里的数据用到的都是tensor,所以谷歌起名为tensorflow。
就像 Python 数值和字符串一样,所有张量都是不可变的:永远无法更新张量的内容,只能创建新的张量。
Tensor 的数组里可以是零维(也可称为标量或一个数)、一维、二维及多维。Tensor 自称为神经网络界的 Numpy,它与 Numpy 相似,二者可以共享内存,且之间的转换非常方便和高效。最大的区别是 Numpy 会把 ndarray 放在 CPU 中进行加速运算,而由 Torch 产生的 Tensor 会放在 GPU 中进行加速运算(如果环境中存在GPU的话)。
2 Tensor操作概述
对 Tensor 的操作很多,从接口的角度来划分,可以分为两类:
- torch.function,如 torch.sum、torch.add 等;
- tensor.function,如 tensor.view、tensor.add 等。
这些操作对大部分 Tensor 都是等价的,如 torch.add(x, y) 与 x.add(y) 等价。在实际使用中,可以根据个人使用偏好进行选择。
如果从修改方式的角度来划分,可以分为如下两类:
- 不修改自身数据,如 x.add(y),x 的数据不变,返回一个新的 Tensor;
- 修改自身数据,如 x.add_(y),运算符带下划线后缀,运行结果会保存在x中,x 被修改。
3 Tensor 的创建
3.1 根据list数据创建
使用 torch.Tensor([1,3,5,7,9]) 或者 torch.tensor([1,3,5,7,9]) 都可以创建Tensor,但是数据类型会不一样,torch.Tensor(list) 创建的Tensor中数据类型为浮点型,而 torch.tensor(list) 创建的Tensor中数据类型为整型。
3.2 根据指定形状创建
如创建二行三列的二维数组,使用如下语句:
torch.Tensor(2,3)
生成的Tensor中,程序会为我们创建一个使用随机数据组成的二维数组。
因为仅指定的每一维度数组的长度,并没有指定数组中具体的数据,因此如果使用 torch.tensor(2,3) 方式创建Tensor,就会报错。
3.3 根据给定Tensor的形状创建
这里可以使用 torch.tensor() 方法或者 torch.Tensor() 创建Tensor,生成一个二维数组:
3.4 根据已有形状创建
在创建新的Tensor之前,已经创建了一个二维的Tensor,然后用原Tensor的形状创建新的Tensor。
获取已有Tensor的形状,可以使用 t.size()
方法。
3.5 创建一维张量
使用 torch.Tensor(1) 创建的是一个随机数据的,大小(size)为1的张量;
而使用 torch.tensor(1) 创建的是一个固定值为1的张量。
3.6 根据规则创建
调用torch中封装好的方法,创建需要的Tensor。
3.6.1 创建单位矩阵
调用torch.eye() 方法,可创建出对角线为1,其它均为0的单位矩阵。
3.6.2 创建全0矩阵
调用 torch.zeros() 方法,创建全为0的矩阵。
3.6.3 根据标准分布随机数创建
调用 torch.randn() 方法,创建根据标准分布随机数组成的矩阵。
3.6.4 根据均匀分布随机数创建
调用 torch.rand() 方法,创建根据均匀分布随机数组成的矩阵。
3.6.5 根据给定形状创建全0矩阵
调用 torch.zeros_like() 方法,依据给定形状,创建一个全为0的矩阵。