pytorch中张量的维度变换,torch.squeeze()、torch.unsqueeze()函数

张量维度变换

通过.reshape方法,能够灵活调整张量的形状。而在实际操作张量进行计算时,往往需要另外进行降维和升维的操作,当我们需要除去不必要的维度时,可以使用squeeze函数,而需要手动升维时,则可采用unsqueeze函数。

1.torch.squeeze()函数:删除不必要的维度,提出了shape返回结果中的1

(1)torch.squeeze()函数的使用

t = torch.zeros(1, 1, 3, 1)  #创建4维张量,由1个三维张量组成,每个三维张量由1个二维张量组成,每个二维张量由3个一维张量组成,每个一维张量有1个元素零(浮点型)组成。
#结果为:tensor([[[[0.],
                   [0.],
                   [0.]]]])
t.shape
#结果为:torch.Size([1, 1, 3, 1])
t张量解释:一个包含一个三维的四维张量,三维张量只包含一个三行一列的二维张量。
torch.squeeze(t) #降维
#结果为:tensor([0., 0., 0.])
torch.squeeze(t).shape
#结果为:torch.Size([3])  #一个数表示一维张量,含有3个元素。转化后生成了一个一维张量  
          
t1 = torch.zeros(1, 1, 3, 2, 1, 2)
t1.shape
#结果为:torch.Size([1, 1, 3, 2, 1, 2])
torch.squeeze(t1)    #降维                 
#结果为:tensor([[[0., 0.],
                  [0., 0.]],

                 [[0., 0.],
                  [0., 0.]],

                 [[0., 0.],
                  [0., 0.]]])
torch.squeeze(t1).shape
#结果为:torch.Size([3, 2, 2])                 

简单理解:squeeze就相当于提出了shape返回结果中的1。

2. torch.unsqueeze()函数:手动升维,维度增加是从前往后数,在shape返回序列的第几个位置插入1

(1) torch.unsqueeze()函数的使用

t = torch.zeros(1, 2, 1, 2)#创建4维张量,由1个三维张量组成,每个三维张量由2个二维张量组成,每个二维张量由1个一维张量组成,每个一维张量有2个元素零(浮点型)组成。
t.shape 
#结果为:torch.Size([1, 2, 1, 2])
torch.unsqueeze(t, dim = 0)   # 在第1个维度索引上升高1个维度
#结果为:tensor([[[[[0., 0.]],

                   [[0., 0.]]]]])

torch.unsqueeze(t, dim = 0).shape
#结果为:torch.Size([1, 1, 2, 1, 2])

torch.unsqueeze(t, dim = 2).shape   # 在第3个维度索引上升高1个维度
#结果为:torch.Size([1, 2, 1, 1, 2]) 
注意观察上面的结果
          
torch.unsqueeze(t, dim = 4).shape   # 在第5个维度索引上升高1个维度
#结果为:torch.Size([1, 2, 1, 2, 1]) 
维度增加是从前往后数,在第几个位置插入1              

注意理解:维度和shape返回结果一一对应的关系,shape返回的序列有几个元素,张量就有多少维度。维度增加是从前往后数,在shape返回序列的第几个位置插入1。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值