【squeeze、unsqueeze】减少、增加维度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【squeeze、unsqueeze】减少、增加维度相关的知识,希望对你有一定的参考价值。

参考技术A

神经网络conv2d的输入必须是四维的(batch,channel,height,width),前处理或者后处理通常需要维度扩充或者维度压缩,必须维度匹配!
一个减少维度,一个增加维度,增加和减少的维度只能是1(单维度)。

numpy中squeeze函数,无unsqueeze函数,numpy中增加维度用 np.expand_dims(x, axis) 函数,可参考 链接
torch的tensor中,两个函数都有。

解释:
从数组的形状中删除单维度条目,即把shape中为1的维度去掉, 相当于减少维度

用法:

举例:

输出:

举例:

输出:

解释:
通过unsuqeeze(int)中的int整数,增加一个维度,int整数表示维度增加到哪儿去,且维度为1。

举例:

输出:

Pytorch中的squeeze()和unsqueeze()函数

在numpy库中,经常会出现“秩为1的一维数组”(come from 吴恩达的深度学习,目前还没有搞清楚numpy中如此设计的意图)。比如:

        技术分享图片

注意这里的a的shape是[3] ,既不是 [1,3] 也不是 [3,1]。这就说明它既不是行向量也不是列向量,只是一个数组。

但是我们可以用squeeze()和unsqueeze()对其进行操作,比如:

       技术分享图片

在对这两个函数讲解之前,我们先统一一下定义:

In  : x.shape
Out: torch.Size( [ a , b , c ] )

这里我们说a是第一个维度(表示第一个维度的数量是a),b是第二个维度(表示第一个维度的数量是b),c是第三个维度(表示第三个维度的数量是c)

简而言之,unsqueeze(arg)是增添第arg个维度为1,以插入的形式填充。比如:

       技术分享图片

       技术分享图片

相反,squeeze(arg)是删除第arg个维度(如果当前维度不为1,则不会进行删除),比如:

       技术分享图片

 

以上是关于【squeeze、unsqueeze】减少、增加维度的主要内容,如果未能解决你的问题,请参考以下文章

终于有人搞懂了详解 torch.unsqueeze() 和 torch.squeeze()

[ Pytorch ] torch.squeeze() 和torch.unsqueeze()的用法

pytorch中squeeze()和unsqueeze()函数介绍

Pytorch中的squeeze()和unsqueeze()函数

Pytorch中torch.unsqueeze()和torch.squeeze()函数解析

torch.linspace,unsqueeze()以及squeeze()函数