pytorch学习(一)squeeze()与unsqueeze()

1、squeeze()

顾名思义,这个函数主要对数据的维度进行压缩。
这个函数对用来压缩维度为1的数据。不管是行数据或者是列数据。总之就是一把梭。这个时候我们来看下列代码。

import torch
a=torch.randn(1,3,4,5)
print(a)

输出的结果:

tensor([[[[-0.8684, 0.0383, 1.5879, -0.6658, -0.3179],

[ 1.3566, 0.0889, -0.9394, 0.1673, -1.1042],

[-0.8013, -0.5392, -0.2123, -0.1178, -0.1631],

[-0.0804, 0.2021, 2.2324, 0.0267, 1.8138]],

 

[[ 0.1914, -0.0085, 1.2500, 2.2350, 0.4534],

[ 0.0107, 1.4725, -1.2218, 0.0631, -0.1788],

[ 0.2802, 0.5159, 0.8254, -2.2698, -0.4060],

[ 1.5673, -1.8352, 0.1425, 0.3127, -0.4280]],

 

[[ 1.3697, 0.7758, -1.5301, -1.8808, -0.5974],

[ 1.6955, -0.1920, 1.7017, 0.5788, 1.4586],

[-0.5524, -0.4635, -1.9550, 1.0506, 0.2397],

[-1.0877, 0.4419, 0.2483, 0.9619, -0.5229]]]])

 此时,我们需要将数据排版稍微修改以下,这样便于理解。修改后的数据为:

[

           [

                    [  [-0.8684, 0.0383, 1.5879, -0.6658, -0.3179],

                       [ 1.3566, 0.0889, -0.9394, 0.1673, -1.1042],

                       [-0.8013, -0.5392, -0.2123, -0.1178, -0.1631],

                       [-0.0804, 0.2021, 2.2324, 0.0267, 1.8138]  ],

 

                  [  [ 0.1914, -0.0085, 1.2500, 2.2350, 0.4534],

                      [ 0.0107, 1.4725, -1.2218, 0.0631, -0.1788],

                     [ 0.2802, 0.5159, 0.8254, -2.2698, -0.4060],

                     [ 1.5673, -1.8352, 0.1425, 0.3127, -0.4280]  ],

 

               [  [ 1.3697, 0.7758, -1.5301, -1.8808, -0.5974],

                   [ 1.6955, -0.1920, 1.7017, 0.5788, 1.4586],

                   [-0.5524, -0.4635, -1.9550, 1.0506, 0.2397],

                  [-1.0877, 0.4419, 0.2483, 0.9619, -0.5229]  ]

           ]

处理完之后,我们发现有一个维度去掉与不去掉都不影响数据,但是维度却降低了。这就是squeeze()的作用,将“多余”的维度给去除掉。

我们将数据使用squeeze()处理之后,可以得到:

[

            [  [-0.8684, 0.0383, 1.5879, -0.6658, -0.3179],

              [ 1.3566, 0.0889, -0.9394, 0.1673, -1.1042],

             [-0.8013, -0.5392, -0.2123, -0.1178, -0.1631],

             [-0.0804, 0.2021, 2.2324, 0.0267, 1.8138]],

 

           [  [ 0.1914, -0.0085, 1.2500, 2.2350, 0.4534],

               [ 0.0107, 1.4725, -1.2218, 0.0631, -0.1788],

               [ 0.2802, 0.5159, 0.8254, -2.2698, -0.4060],

               [ 1.5673, -1.8352, 0.1425, 0.3127, -0.4280]],

 

          [  [ 1.3697, 0.7758, -1.5301, -1.8808, -0.5974],

            [ 1.6955, -0.1920, 1.7017, 0.5788, 1.4586],

           [-0.5524, -0.4635, -1.9550, 1.0506, 0.2397],

            [-1.0877, 0.4419, 0.2483, 0.9619, -0.5229]]

]

此外,squeeze()还可以有以下几种操作:
squeeze(a,0) 将第1位维度为1给去掉。(如果第一位维度不为1的话,则没有变化。)执行操作:

import torch
a=torch.randn(1,3,4,5)
print(a.shape)
print(a)
print('=============================')
c=torch.squeeze(a,0)
print(c.shape)
print(c)

pytorch学习(一)squeeze()与unsqueeze()_第1张图片

以此类推,如果执行squeeze(a,2) 则是将第3位维度为1 降维。

 

2、unsqueeze()

squeeze()相对应的是unsqueeze()。那么unsqueeze()就是为了增维:给指定位置加上维数为一的维度。两种写法:

b=a.unsqueeze(N) 就是在a中指定位置N加上一个维数为1。
b=torch.unsqueeze(a,N)  a就是在a中指定位置N加上一个维数为1的维度

来看看以下代码:

import torch
a=torch.randn(4,5)
print(a.shape)
print(a)
print('=============================')
b=torch.unsqueeze(a,0)
print(b.shape)
print(b)
c=a.unsqueeze(0)
print(c.shape)
print(c)

pytorch学习(一)squeeze()与unsqueeze()_第2张图片

那么unsqueeze()函数的功能就显而易见了!

你可能感兴趣的:(Pytorch,pytorch,unsqueeze,squeeze)