我正在查看文档,这是他们的示例。我不明白这个例子如何与他们的解释相对应:“返回在指定位置插入尺寸为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]])
答案 0 :(得分:15)
unsqueeze
变成了 n.d.张量变成 (n+1).d。一种方法是添加一个深度为 1 的额外维度。然而,由于新维度应该跨越哪个轴(即它应该在哪个方向“未压缩”)是不明确的,这需要由 dim
参数指定.
例如unsqueeze
可以通过三种不同的方式应用于 2d 张量:
生成的未压缩张量具有相同的信息,但用于访问它们的索引不同。
答案 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)
时)。因此,根据第二个参数的值,在数组1
或1
处以数组的形状插入了0
。
与np.squeeze()
(从MATLAB借用的术语)相反,后者删除了大小为1
(单个)的轴。
答案 3 :(得分:1)
答案 4 :(得分:0)
unsqueeze 是一种改变张量维度的方法,使得张量乘法等操作成为可能。这基本上改变了维度以产生具有不同维度的张量。
例如:如果您想将大小为 (4) 的张量与大小为 (4, N, N) 的张量相乘,则会出现错误。 但是使用 unsqueeze 方法,您可以将张量转换为大小 (4,1,1)。现在,由于它有一个大小为 1 的操作数,您将能够将两个张量相乘。