PyTorch升维和降维

降维官方文档
升维官方文档

直接翻译吧,看了几篇博客,不是很清晰。

降维

torch.squeeze(input, dim=None)->Tensor

input:输入张量数据
dim:默认为None,如果不指定值,会删除input所有维度为1的数据,如input shape(A*1*B*C*1*D)–>(A*B*C);再或者,我们指定维度,注意,这里的指定是通过shape的索引来指定,那么如果索引指定的维度为1则进行降维,非1则不降。

例子

import torch
a = torch.zeros(2, 1, 2, 1, 2)
a.size() # torch.Size([2, 1, 2, 1, 2])
b = torch.squeeze(a) 
b.size() # torch.Size([2, 2, 2])
c = torch.squeeze(a, 0)
c.size() # torch.Size([2, 1, 2, 1, 2]), 不需要降维
d = torch.squeeze(a, 3)
d.size() # torch.Size([2, 1, 2, 2])

note

input tensor 和 return tensor 会共享内存,因此修改其中一个,另外一个也会变,原因就是,他们都是storage 的 view,至于为什么,请参考该链接

# 验证:
id(a.storage()) == id(b.storage) # True

warning

如果input tensor 有一个为1的batch size,torch.squeeze(input) 也会清除 batch 维度,所以,要小心哦。

升维

升且只升1维。

torch.unsqueeze(input, dim) --> Tensor

返回一个在特定位置增维后的new tensor,依然 share storage。
dim参数范围:[-input.dim() - 1, input.dim()],如果dim是负的,则 dim = dim + input.dim() + 1.

参数解释

input(Tensor) - 输入的tensor
dim(int) - 扩增维度的索引位置

例子

# torch.unsqueeze(input, dim)
ac = torch.tensor([[1, 2], [3, 4]])
ac.dim() # 2
# dim is in [-3, 2],即-3、-2、-1、0、1、2
torch.unsqueeze(ac, 0).shape # 1, 2, 2
torch.unsqueeze(ac, 1).shape # 2, 1, 2
torch.unsqueeze(ac, 2).shape # 2, 2, 1
# -3, -2, -1 与 0, 1, 2 功能相同
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值