【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()函数