pytorch squeeze与unsqueeze函数

squeeze函数

  原型为:torch.squeeze(input, dim=None, *, out=None) → Tensor

        删除一个张量中所有维数为1的维度

        例如,一个维度为 ( A × 1 × B × C × 1 × D ) 的张量调用squeeze方法后维度变为( A × B × C ×         D ) 

        当给定维度(dim)参数后,squeeze操作只作用于给定维度。如果输入input的形状为( A ×1 × B ), squeeze(input, 0)不改变这个张量, 但是squeeze(input, 1) 将把这个张量的形状变为( A × B ).

In:  import torch
      a = torch.arange(2,7)
In:   a
Out: tensor([2, 3, 4, 5, 6])

In:  b=a.unsqueeze(1)
     c=b.unsqueeze(2)
     c.size()
Out:  torch.Size([5, 1, 1])#此时c中有两个维度为1

In:  c.squeeze().size() #使用squeeze(),无参数
Out:  torch.Size([5])#结果将所有维度为1 的都去掉了,最终剩下一个维度

unsqueeze函数

原型为:torch.unsqueeze(input, dim=None, *, out=None) → Tensor

unsqueeze()函数起升维的作用,参数dim表示在哪个地方加一个维度,其实际意义就是说,原始数据可能就是一个一维的数组,而进行运算时可能需要是二维或者三维的,因此可以使用unsqueeze()函数进行维数扩展,一般情况是在tensor的最前面或者最后面扩展。该函数使用时必须给参数,参数代表在哪个位置添加维度。

In:     import torch
        #randn(m,n):生成m行n列标准正态分布的伪随机数
        a = torch.randn(3,4) 
Out:    tensor([[-1.0809, -0.8047, -0.6995,  0.5052],
        [-0.7799,  0.9266,  0.0258,  0.7924],
        [ 1.0556, -1.1555,  0.2691,  0.0818]])

In:     a.size()
Out:    torch.Size([3, 4])

In:     b=a.unsqueeze(1)#下标从0开始,在下标为1的位置添加一个维度,值     为1 
        b.size()
Out:    torch.Size([3, 1, 4])

In:     c=b.unsqueeze(3)#在下标为1的位置添加一个维度
        c.size()
Out:    torch.Size([3, 1, 4, 1])

一般情况,我们只在下标为0的位置或者最后一个下标处增加维度
所谓的增加维度,对实际的数据来说,并没有任何改变,只是通过这个操作,让计算机看起来这个tensor变成了一个高维的tensor
unsqueeze()有点类似于view()作用,view()从意思来看,就是将其视为怎样的shape,也就是说,是一个“视觉”上的操作。

参考:

(3条消息) 秒懂pytorch中squeeze()和unsqueeze()函数_附子Jun的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值