pytorch中的torch.unsqueeze和squeeze张量维度变化问题

顾名思义:unsqueeze,扩展维度,返回一个新的张量,对输入的既定位置插入维度 1

                  squeeze,压缩维度,将输入张量形状中的1 去除并返回。

torch.unsqueeze(input, dim)

torch.squeeze(input, dim)

  • tensor (Tensor) – 输入张量
  • dim (int) – 插入/消除 维度的索引

以下用一个二维张量进行举例:

压缩维度仅对(0,1)索引进行示例,(-1,-2)原理类似

import torch

x = torch.Tensor([[1, 2, 3, 4],
                 [5,6,7,8]])  
print('#' * 50)
print(x)  
print(x.size())  
print(x.dim())  

##########
print('#' * 50)
print(torch.unsqueeze(x, 0))  
print(torch.unsqueeze(x, 0).size())  
print(torch.unsqueeze(x, 0).dim())  
m=torch.unsqueeze(x, 0)
print(m.squeeze(0))
n=m.squeeze(0)
print(n.size())
print(n.dim())

##########
print('#' * 50)
print(torch.unsqueeze(x, 1))
print(torch.unsqueeze(x, 1).size())  
print(torch.unsqueeze(x, 1).dim())  
a=torch.unsqueeze(x, 1)
print(a.squeeze(1))
b=a.squeeze(1)
print(b.size())
print(b.dim())

##########
print('#' * 50)
print(torch.unsqueeze(x, -1))
print(torch.unsqueeze(x, -1).size())  
print(torch.unsqueeze(x, 1).dim())

##########
print('#' * 50)
print(torch.unsqueeze(x, -2))  
print(torch.unsqueeze(x, -2).size())  
print(torch.unsqueeze(x, -2).dim())  

相应结果:

##################################################
tensor([[1., 2., 3., 4.], 
        [5., 6., 7., 8.]])
torch.Size([2, 4])
2
##################################################
tensor([[[1., 2., 3., 4.],
         [5., 6., 7., 8.]]])
torch.Size([1, 2, 4])
3
tensor([[1., 2., 3., 4.],
        [5., 6., 7., 8.]])
torch.Size([2, 4])
2
##################################################
tensor([[[1., 2., 3., 4.]],

        [[5., 6., 7., 8.]]])
torch.Size([2, 1, 4])
3
tensor([[1., 2., 3., 4.],
        [5., 6., 7., 8.]])
torch.Size([2, 4])
2
##################################################
tensor([[[1.],
         [2.],
         [3.],
         [4.]],

        [[5.],
         [6.],
         [7.],
         [8.]]])
torch.Size([2, 4, 1])
3
##################################################
tensor([[[1., 2., 3., 4.]],

        [[5., 6., 7., 8.]]])
torch.Size([2, 1, 4])
3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值