PyTorch - 09 - Flatten, Reshape, 和Squeeze说明 - 使用PyTorch进行深度学习的张量
Reshaping Operations - Tensors For Deep Learning
在深入研究特定的张量操作之前,让我们通过查看主要操作类别(包括我们将要介绍的操作)来快速了解情况。我们有以下高级操作类别:
- 重塑操作 (Reshaping operations)
- 按元素操作 (Element-wise operations)
- 还原操作 (Reduction operations)
- 访问操作 (Access operations)
那里有很多单独的操作,以至于您刚开始时有时会令人生畏,但是根据相似性将相似的操作分组为几类,有助于使对张量操作的了解更加易于管理。
之所以显示这些类别,是为了使您能够在本系列文章的最后部分了解所有这四个类别。
这些关于张量操作的文章的目的不仅是展示常用的特定张量操作,而且还描述操作情况。知道现有的操作类型比知道或记住单个操作要长得多。
请牢记这一点,并在我们探索每个类别时努力理解这些类别。现在让我们开始进行整形操作。
Reshaping Operations For Tensors
重整操作可能是张量操作最重要的类型。 这是因为,就像我们在介绍张量的帖子中提到的那样,张量的形状为我们提供了一些具体的东西,可用来为张量形成直觉。
An Analogy For Tensors
假设我们是神经网络程序员,因此,我们通常会花费很多时间来构建神经网络。为了完成我们的工作,我们使用各种工具。
我们使用微积分和线性代数等数学工具,Python和PyTorch等计算机科学工具,CPU和GPU等物理和工程工具以及神经网络,层,激活函数等机器学习工具。
我们的任务是建立可将输入数据转换或映射到我们正在寻找的正确输出的神经网络。我们用来生产产品的主要成分是数据,该函数将输入映射到正确的输出。
数据
在某种程度上是一个抽象的概念,因此当我们想实际使用数据的概念来实现某些东西时,我们使用一种称为张量的特定数据结构,该结构可以在代码中有效实现。张量具有数学和其他方面的属性,使我们能够进行工作。
张量
是神经网络程序员用来生产其产品智能的主要成分。
这与面包师使用面团来制作比萨饼的方式非常相似。面团是用于创建输出的输入,但是在生产披萨之前,通常需要对输入进行某种形式的重塑。
作为神经网络程序员,我们必须对张量执行相同的操作,通常对张量进行整形和重塑是一项常见的任务。
毕竟,我们的网络在张量上运行,这就是为什么了解张量的形状和可用的整形操作非常重要的原因。
我们不是在生产比萨,而是在生产智能!这可能很la脚,但无论如何。让我们开始重塑操作。
Tensor Shape Review
假设我们有以下张量:
> t = torch.tensor([
[1,1,1,1],
[2,2,2,2],
[3,3,3,3]
], dtype=torch.float32)
为了确定该张量的形状,我们首先查看第3行,然后查看第4列,因此该张量是3 x 4的2级张量。请记住,等级是一个常用的词,仅表示张量中存在的维数。
在PyTorch中,我们有两种获取形状的方法:
> t.size()
torch.Size([3, 4])
> t.shape
torch.Size([3, 4])
在PyTorch中,张量的大小和形状表示相同的意思。
通常,在知道张量的形状之后,我们可以推断出几件事。首先,我们可以得出张量的等级。张量的秩等于张量形状的长度。
> len(t.shape)
2
我们还可以推断出张量中包含的元素数量。张量内的元素数量(在我们的示例中为12)等于形状成分值的乘积。
> torch.tensor(t.shape).prod()
tensor(12)
在PyTorch中,有一个专用的功能:
> t.numel()
12
张量中包含的元素数量对于重塑很重要,因为重塑必须考虑存在的元素总数。重塑会更改张量的形状,但不会更改基础数据。我们的张量包含12个元素,因此任何重塑都必须恰好包含12个元素。
Reshaping A Tensor In PyTorch
现在让我们看一下在不改变等级的情况下可以重塑此张量t
的所有方法:
> t.reshape([1,12])
tensor([[1., 1., 1., 1., 2., 2., 2., 2., 3., 3., 3., 3.]])
> t.reshape([2