顾名思义,这个函数主要对数据的维度进行压缩。
这个函数对用来压缩维度为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)
以此类推,如果执行squeeze(a,2) 则是将第3位维度为1 降维。
与 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)
那么unsqueeze()函数的功能就显而易见了!