pytorch学习之---squeeze()和unsqueeze()函数功能及使用

首先这个squeeze单词啥意思:

pytorch学习之---squeeze()和unsqueeze()函数功能及使用_第1张图片

1.squeeze(1)和squeeze(-1)作用:

两者的效果一样,都是给张量tensor降维,但不是啥张量都可以用这两个函数来降维,它只能降维一种情况下张量的维度。就是我的张量tensor是一个n*1维度的张量,例如:张量[[1], [2], [3]]是一个3*1维的,调用这两个函数后效果如图:

pytorch学习之---squeeze()和unsqueeze()函数功能及使用_第2张图片

pytorch学习之---squeeze()和unsqueeze()函数功能及使用_第3张图片

但是如果不是n*1的这种2维张量的话,如本就是1维的,或者m*n(其中m和n都是大于1的)这种的话,调用这个函数一点效果没有。

2.squeeze(0)的作用:

当张量是一个1*n维度的张量时,例如:张量[[1, 2, 3]]是一个1*3维的,调用这个函数后的效果图如下:

pytorch学习之---squeeze()和unsqueeze()函数功能及使用_第4张图片

pytorch学习之---squeeze()和unsqueeze()函数功能及使用_第5张图片

但是如果不是1*n的这种2维张量的话,如本就是1维的,或者m*n(其中m和n都是大于1的)这种的话,调用这个函数一点效果没有。

 

3.unsqueeze(1)和unsqueeze(-1)作用:

和squeeze(1)和squeeze(-1)是反着的,如果我就是一个一维的张量,我调用这个函数,我就变成上面第1节中的原本的样子。

例如:张量[1.2, -5.6, 9, 0.004],调用这两个函数后的效果为:

pytorch学习之---squeeze()和unsqueeze()函数功能及使用_第6张图片

pytorch学习之---squeeze()和unsqueeze()函数功能及使用_第7张图片

如果我就是一n*m的2维的张量,调用这两个函数后的效果是啥呢?果然预期的一样,一点效果没有

例如:

pytorch学习之---squeeze()和unsqueeze()函数功能及使用_第8张图片

pytorch学习之---squeeze()和unsqueeze()函数功能及使用_第9张图片

4.unsqueeze(0)作用:

和第2节中的squeeze(0)的作用是反这的。

例如:张量[1.2, -5.6, 9, 0.004],调用这个函数后的效果为:

pytorch学习之---squeeze()和unsqueeze()函数功能及使用_第10张图片

pytorch学习之---squeeze()和unsqueeze()函数功能及使用_第11张图片

 

5.当维度不在是1,2维时,例如3维的张量时,测试发现,如果参数为1或者-1,此时函数关心的是第2维度是不是1,如果是1的话,就能类比进行上面1和3节的操作;如果参数是0,此时函数只关心第1维度是不是1(你不知道是不是1,size()一下看看),则就是类比进行上面2和4节的操作。

例如:举个第1维度是1的,使用参数0,调用函数试试效果:

pytorch学习之---squeeze()和unsqueeze()函数功能及使用_第12张图片

pytorch学习之---squeeze()和unsqueeze()函数功能及使用_第13张图片

 

 

 

 

 

你可能感兴趣的:(PyTorch,python,pytorch,人工智能)