PyTorch项目实战02——Tensor张量的创建

531 阅读3分钟

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 被修改。

image.png

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中数据类型为整型。

image.png

3.2 根据指定形状创建

如创建二行三列的二维数组,使用如下语句:

​torch.Tensor(2,3)​

生成的Tensor中,程序会为我们创建一个使用随机数据组成的二维数组。

因为仅指定的每一维度数组的长度,并没有指定数组中具体的数据,因此如果使用 torch.tensor(2,3) 方式创建Tensor,就会报错。

image.png

3.3 根据给定Tensor的形状创建

这里可以使用 torch.tensor() 方法或者 torch.Tensor() 创建Tensor,生成一个二维数组:

image.png

3.4 根据已有形状创建

在创建新的Tensor之前,已经创建了一个二维的Tensor,然后用原Tensor的形状创建新的Tensor。

获取已有Tensor的形状,可以使用 ​​t.size()​​方法。

image.png

3.5 创建一维张量

使用 torch.Tensor(1) 创建的是一个随机数据的,大小(size)为1的张量;

而使用 torch.tensor(1) 创建的是一个固定值为1的张量。

image.png

3.6 根据规则创建

调用torch中封装好的方法,创建需要的Tensor。

3.6.1 创建单位矩阵

调用torch.eye() 方法,可创建出对角线为1,其它均为0的单位矩阵。

image.png

3.6.2 创建全0矩阵

调用 torch.zeros() 方法,创建全为0的矩阵。

image.png

3.6.3 根据标准分布随机数创建

调用 torch.randn() 方法,创建根据标准分布随机数组成的矩阵。

image.png

3.6.4 根据均匀分布随机数创建

调用 torch.rand() 方法,创建根据均匀分布随机数组成的矩阵。 image.png

3.6.5 根据给定形状创建全0矩阵

调用 torch.zeros_like() 方法,依据给定形状,创建一个全为0的矩阵。

image.png