pytorch语法日常之torch.squeeze()和torch.unsqueeze()

1.torch.squeeze()

torch.squeeze(input, dim=None, out=None)
其中参数分别为:
input (Tensor) – 输入张量
dim (int, optional) – 如果给定,则input只会在给定维度挤压
out (Tensor, optional) – 输出张量

作用:降维

将输入张量形状中维度为1 的去除并返回。 当给定具体的dim时,那么挤压操作只在给定维度上, dim = 0 将会保持张量不变,如果最后一个维度为1,dim = -1将进行挤压操作 。举个例子:

import torch
x = torch.arange(8).view(2, 1, 4)  # torch.Size([2, 1, 4])
print(torch.squeeze(x))  # torch.Size([2, 1, 4])

y1 = x.squeeze(0)  # torch.Size([2, 1, 4])

y2 = x.squeeze(1)  
print(y2.size())  # torch.Size([2, 4])

y3 = x.squeeze(2)  
print(y3.size())  # torch.Size([2, 1, 4])

x = torch.arange(8).view(2, 4, 1)
y4 = x.squeeze(-1)
print(y4.size())  # torch.Size([2, 4])

注意: 返回张量与输入张量共享内存,所以改变其中一个的内容会改变另一个。至于为什么会有这个操作,是因为维度为 1 仅仅起到扩充维度的作用,而没有其他用途,因而,在进行降维操作时,为了加快计算,是可以去掉这些 1 的维度。

2.torch.unsqueeze()

torch.unsqueeze(input, dim, out=None)

参数:
tensor (Tensor) – 输入张量
dim (int) – 插入维度的索引
out (Tensor, optional) – 结果张量

作用:扩展维度

返回一个新的张量,对输入的既定位置插入维度 1,老样子举个例子:

import torch
x = torch.arange(8).view(2, 4, 1)  # torch.Size([2, 4, 1])

y1 = x.unsqueeze(0)  # torch.Size([1, 2, 4, 1])
print(y1.size())

y2 = x.unsqueeze(1)
print(y2.size())  # torch.Size([2, 1, 4, 1])

y3 = x.unsqueeze(2)
print(y3.size())  # torch.Size([2, 4, 1, 1])

x = torch.arange(8).view(2, 1, 4)
y4 = x.unsqueeze(-1)
print(y4.size())  # torch.Size([2, 1, 4, 1])
y5 = x.unsqueeze(-2)
print(y5.size())  # torch.Size([2, 1, 1, 4])
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值