一、tensor的基础知识
在探讨如何增加维度之前,我们需要先回顾一下tensor的基础知识。tensor是PyTorch中的基础数据结构,可以看作是多维数组。举个例子,一个标量可以被视为一个零维的tensor,而一个向量可以被视为一个一维tensor,一个矩阵可以被视为一个二维tensor,类推。
在PyTorch中,我们可以通过torch.Tensor创建张量,例如:
import torch
a = torch.Tensor([[1,2,3],[4,5,6],[7,8,9]])
上述代码创建了一个二维的大小为3x3的张量,包含了从1到9的数字。接下来,我们将围绕如何增加张量的维度展开讨论。
二、增加维度的方式
在PyTorch中,我们可以使用不同的函数来增加一个张量的维度。下面介绍三种常用的方式。
1. 使用unsqueeze函数增加维度
使用unsqueeze函数可以在张量中插入新的维度。unsqueeze函数的参数是插入的维度下标,下标从0开始计数。例如,下面的代码在a的第一维度(即行)上增加了一个新的维度:
a = a.unsqueeze(0)
print(a.shape)
输出如下:
torch.Size([1, 3, 3])
我们可以看到,张量a的第一维度大小由原来的3变为了1,并在第一维度上增加了一个新的维度。同样地,我们可以在其他维度上使用unsqueeze函数增加维度。
2. 使用view函数增加维度
使用view函数可以调整张量的维度。对于一个张量,我们可以通过reshape或者view函数调整其形状,不同之处在于当张量不连续时,reshape会出现错误,而view函数不会。下面的代码增加了一个新的维度,并将其放置在了张量的最后一个维度上:
b = a.view(-1, 3, 1)
print(b.shape)
输出如下:
torch.Size([3, 3, 1])
在上述代码中,我们使用view函数将张量a调整成了一个三维的张量,新的张量b的第三个维度大小为1,该维度位于最后一个维度上,并且通过设置第一个参数为-1,使得view函数能够自动计算第一个维度的大小。
3. 使用unsqueeze和view函数结合增加维度
使用unsqueeze和view函数可以结合增加维度。例如,下面的代码在a的第二个维度上增加了一个新的维度,并将其放置在了最后一个维度上:
c = a.unsqueeze(2).view(3,3,1)
print(c.shape)
输出如下:
torch.Size([3, 3, 1])
在上述代码中,我们先使用unsqueeze函数在第二个维度上插入了一个新的维度,然后使用了view函数将张量a调整成了一个三维的张量,新的张量c的第三个维度大小为1,该维度位于最后一个维度上。
三、小结
在PyTorch中,我们可以使用unsqueeze和view函数来增加一个张量的维度。前者是在张量中插入新的维度,而后者是通过调整张量的形状来增加维度。可以根据实际需求使用不同的函数来增加维度。