1. Pytorch函数view
1.1 view函数概述
在Pytorch中,我们经常需要对张量进行变形操作,比如将一维向量转化为二维矩阵,或者将高维张量降维转化为低维。这时,Pytorch提供了view函数来实现这一功能。
view函数的作用是返回一个新的张量,该张量与原来的张量共享数据,但是可以对该张量进行维度的重新划分。它的参数中包含一个元组,其中的每个数字表示该维度的新大小。如果该元组中的某个值为-1,那么Pytorch会根据其他维度大小自动推断该维度的大小。
例如,对于一个二维张量,我们可以使用view函数将其重新划分为另一个二维张量:
import torch
x = torch.randn(3, 4)
y = x.view(4, 3)
这里,我们使用view函数将一个形状为(3,4)的二维张量x重新划分为一个形状为(4,3)的二维张量y。由于该函数返回的是一个新的张量,因此我们需要将其赋值给一个新的变量。
1.2 view函数示例
下面我们使用一个示例来说明view函数的使用方法。首先,我们构造一个形状为(2,3,4)的三维张量:
x = torch.randn(2,3,4)
print(x.shape)
这个张量的形状为(2,3,4),其中第一维的大小为2,第二维的大小为3,第三维的大小为4。我们可以使用view函数将其转化为一个形状为(6,4)的二维张量:
y = x.view(6,4)
print(y.shape)
这样,我们就把一个三维张量转化为了一个二维张量。需要注意的是,由于新张量的大小为(6,4),这里的6和4都是我们手动指定的。如果希望在指定某一个维度的大小时,使用自动推断,可以将对应的维度指定为-1。例如,如果我们希望将原张量转化为一个形状为(2,-1)的二维张量,可以使用如下代码:
y = x.view(2,-1)
print(y.shape)
这里,Pytorch会自动推断出第二维的大小为6。
2. Pytorch函数permute
2.1 permute函数概述
在Pytorch中,我们经常需要对张量的维度顺序进行修改。例如,将一张形状为(3,4,5)的三维张量的维度顺序修改为(4,5,3),或者将一张形状为(2,3,4,5)的四维张量的维度顺序修改为(2,5,3,4)。这时,Pytorch提供了permute函数来实现这一功能。
permute函数的作用是返回一个新的张量,该张量与原来的张量共享数据,但是可以对该张量进行轴的重新排列。它的参数中包含一个元组,其中的每个数字表示该轴在新张量中的位置。例如,对于一个三维张量,我们可以使用permute函数将其重新排列为另一个三维张量:
import torch
x = torch.randn(3, 4, 5)
y = x.permute(1, 2, 0)
这里,我们使用permute函数将一个形状为(3, 4, 5)的三维张量x重新排列为一个形状为(4, 5, 3)的三维张量y。
2.2 permute函数示例
下面我们使用一个示例来说明permute函数的使用方法。首先,我们构造一个形状为(2,3,4)的三维张量:
x = torch.randn(2,3,4)
print(x.shape)
这个张量的形状为(2,3,4),其中第一维的大小为2,第二维的大小为3,第三维的大小为4。我们可以使用permute函数将其转化为一个形状为(3,4,2)的三维张量:
y = x.permute(1,2,0)
print(y.shape)
这样,我们就把一个形状为(2,3,4)的张量转化为了一个形状为(3,4,2)的张量。需要注意的是,由于permute函数返回的是一个新的张量,因此我们需要将其赋值给一个新的变量。
3. Pytorch函数squeeze
3.1 squeeze函数概述
在Pytorch中,我们经常需要对张量中的维度进行压缩操作,比如将大小为1的维度去除。例如,将一张形状为(1,3,1,4)的四维张量的维度大小为1的轴去除后,得到的新张量形状为(3,4)。这时,Pytorch提供了squeeze函数来实现这一功能。
squeeze函数的作用是返回一个新的张量,该张量与原来的张量共享数据,但是可以对该张量进行维度压缩操作。它的参数为一个整数或者一个元组,表示要去除哪些维度的大小为1的轴。如果不指定任何参数,则去除所有大小为1的轴。
例如,对于一个四维张量,我们可以使用squeeze函数将其中大小为1的轴去除:
import torch
x = torch.randn(1,3,1,4)
y = x.squeeze()
这里,我们使用squeeze函数将一个形状为(1,3,1,4)的四维张量x去除所有大小为1的轴,得到一个形状为(3,4)的新张量y。
3.2 squeeze函数示例
下面我们使用一个示例来说明squeeze函数的使用方法。首先,我们构造一个形状为(1,3,1,4)的四维张量:
x = torch.randn(1,3,1,4)
print(x.shape)
这个张量的形状为(1,3,1,4),其中第一维的大小为1,第二维的大小为3,第三维的大小为1,第四维的大小为4。我们可以使用squeeze函数将其中大小为1的轴去除:
y = x.squeeze()
print(y.shape)
这样,我们就把一个形状为(1,3,1,4)的张量转化为了一个形状为(3,4)的张量。需要注意的是,由于squeeze函数返回的是一个新的张量,因此我们需要将其赋值给一个新的变量。
4. Pytorch函数unsqueeze
4.1 unsqueeze函数概述
在Pytorch中,我们经常需要对张量中的维度进行扩展操作,比如将原本没有的维度添加进去。例如,将一张形状为(3,4)的二维张量添加一个新的维度后,得到的新张量形状为(1,3,4)。这时,Pytorch提供了unsqueeze函数来实现这一功能。
unsqueeze函数的作用是返回一个新的张量,该张量与原来的张量共享数据,但是可以对该张量进行维度扩展操作。它的参数为一个整数,表示要在哪个位置添加一个新的大小为1的轴。
例如,对于一个二维张量,我们可以使用unsqueeze函数在第一轴添加一个新的大小为1的轴:
import torch
x = torch.randn(3, 4)
y = x.unsqueeze(0)
这里,我们使用unsqueeze函数将一个形状为(3,4)的二维张量x在第一轴添加一个新的大小为1的轴,得到一个形状为(1,3,4)的新张量y。
4.2 unsqueeze函数示例
下面我们使用一个示例来说明unsqueeze函数的使用方法。首先,我们构造一个形状为(3,4)的二维张量:
x = torch.randn(3, 4)
print(x.shape)
这个张量的形状为(3,4),其中第一维的大小为3,第二维的大小为4。我们可以使用unsqueeze函数在第一轴添加一个新的大小为1的轴:
y = x.unsqueeze(0)
print(y.shape)
这样,我们就在原来的张量的第一轴上添加了一个新的维度,得到了一个形状为(1,3,4)的新张量。需要注意的是,由于unsqueeze函数返回的是一个新的张量,因此我们需要将其赋值给一个新的变量。