“解压”在Pytorch中做什么?

时间:2019-07-28 01:43:43

标签: python pytorch torch torchvision

我正在查看文档,这是他们的示例。我不明白这个例子如何与他们的解释相对应:“返回在指定位置插入尺寸为1的新张量。”

>>> x = torch.tensor([1, 2, 3, 4])
>>> torch.unsqueeze(x, 0)
tensor([[ 1,  2,  3,  4]])
>>> torch.unsqueeze(x, 1)
tensor([[ 1],
        [ 2],
        [ 3],
        [ 4]])

5 个答案:

答案 0 :(得分:15)

unsqueeze 变成了 n.d.张量变成 (n+1).d。一种方法是添加一个深度为 1 的额外维度。然而,由于新维度应该跨越哪个轴(即它应该在哪个方向“未压缩”)是不明确的,这需要由 dim 参数指定.

例如unsqueeze 可以通过三种不同的方式应用于 2d 张量:

enter image description here

生成的未压缩张量具有相同的信息,但用于访问它们的索引不同。

答案 1 :(得分:10)

它指示添加尺寸的位置。 torch.unsqueeze给张量增加了一个尺寸。假设您有一个形状为(3)的张量,如果在0位置添加一个尺寸,则它的形状将为(1,3),即1行3列。如果在1位置添加,它将是(3,1),表示3行1列。如果您具有形状为(2,2)的2D张量,请在0位置添加一个额外的尺寸,这将导致该张量具有(1,2,2)的形状,这意味着一个通道,2行和2列。如果在1位置添加,它将具有形状(2,1,2),因此它将具有2个通道,1行和2列。如果将其添加到2位置,则张量的形状将为(2,2,1),表示2个通道,2行和1列。

答案 2 :(得分:1)

如果查看数组前后的形状,则会发现它在(4,)之前和之后(1, 4)(第二个参数为0时)和{{ 1}}(当第二个参数是(4, 1)时)。因此,根据第二个参数的值,在数组11处以数组的形状插入了0

np.squeeze()(从MATLAB借用的术语)相反,后者删除了大小为1(单个)的轴。

答案 3 :(得分:1)

我不确定为什么这里没有提到PyTorch引用,因为这是PyTorch的传统。

torch.squeeze enter image description here

torch.unsqueeze enter image description here

答案 4 :(得分:0)

unsqueeze 是一种改变张量维度的方法,使得张量乘法等操作成为可能。这基本上改变了维度以产生具有不同维度的张量。

例如:如果您想将大小为 (4) 的张量与大小为 (4, N, N) 的张量相乘,则会出现错误。 但是使用 unsqueeze 方法,您可以将张量转换为大小 (4,1,1)。现在,由于它有一个大小为 1 的操作数,您将能够将两个张量相乘。