您的位置:

从多个方面解析unsqueeze函数

一、单一维度插入

unsqueeze函数是PyTorch中的一个核心函数,广泛用于神经网络模型的构建和编写。它的作用主要是在指定维度上插入维度数为1的新维度。当我们需要在特定位置插入新的维度时,unsqueeze函数就非常有用了。

例如,我们有一个形状为(3,4)的张量,希望在第二维度上插入新的维度,则代码如下:

import torch

x = torch.ones(3,4)
print("原始张量形状:", x.shape) #(3,4)

x = torch.unsqueeze(x, 1)
print("插入新维度后的张量形状:", x.shape) #(3,1,4)

unsqueeze函数中的第一个参数是待操作的张量,第二个参数是要插入的维度的位置。在上面的示例中,我们在第二维度位置插入了新的维度。

二、多维度插入

unsqueeze函数不仅仅可以插入单个维度,还可以在一个张量中同时插入多个维度。可以通过向第二个参数传入一个元组(tuple)来实现多维度插入操作。

例如,我们有一个形状为(2,3)的张量,在第二维度和第四个维度上都插入新的维度,代码如下:

import torch

x = torch.ones(2,3)
print("原始张量形状:", x.shape) #(2,3)

x = torch.unsqueeze(x, (1,3))
print("插入新维度后的张量形状:", x.shape) #(2,1,3,1)

多次调用unsqueeze函数也可以实现多维度插入,但使用元组的方式更加简便。

三、与unsqueeze相反的操作

如果我们在某个维度上插入的维度数为1,那么此时我们也可以使用squeeze函数将这个维度删除。

例如,我们有一个形状为(2,1,3,1)的张量,将第二个维度删除,则代码如下:

import torch

x = torch.ones(2,1,3,1)
print("原始张量形状:", x.shape) #(2,1,3,1)

x = torch.squeeze(x, 1)
print("删除维度后的张量形状:", x.shape) #(2,3,1)

squeeze函数和unsqueeze函数操作类似,第一个参数是待操作的张量,第二个参数是要删除的维度的位置。在上面的示例中,我们删除了维度为1的第二个维度。

四、与其他函数的组合应用

unsqueeze函数与其他函数的组合应用非常广泛。例如,当我们需要对两个张量进行相加操作时,需要满足它们的维度数相同,这时我们可能需要插入一些新的维度,使得两个张量维度数相同。实现方法就是通过unsqueeze函数将需要插入的维度插入进去。

例如,我们有两个形状分别为(2,3)和(1,3,1)的张量,希望将它们通过相加操作合并为一个张量,则代码如下:

import torch

x = torch.ones(2,3)
y = torch.ones(1,3,1)

x = torch.unsqueeze(x, 0)
y = torch.squeeze(y, 2)

z = x + y
print("合并后的张量形状:", z.shape) #(2,3,1)

在上面的示例中,我们通过unsqueeze函数给第一个张量插入了一个新的维度,在第一维度位置插入,让它的形状变为(1,2,3)。另外,我们还使用了squeeze函数将第二个张量的第二个维度删除,让它的形状变为(1,3)。这样两个张量就可以进行相加操作了。