Pytorch函数view、permute、squeeze、usqueeze

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函数返回的是一个新的张量,因此我们需要将其赋值给一个新的变量。

后端开发标签