torch.unsqueeze() 和 torch.squeeze()详解

本文详细介绍了PyTorch中的squeeze和unsqueeze函数,包括它们的作用、参数和使用示例。squeeze用于去除张量中维度为1的轴,unsqueeze则用于在指定位置增加新的维度。文章通过实例展示了这两个操作如何影响张量的形状,并讨论了带下划线版本的squeeze_和unsqueeze_对原始张量的影响。
摘要由CSDN通过智能技术生成

1. torch.squeeze

torch.squeeze(input, dim=None, *, out=None)

  • input:输入的张量
  • dim:选择需要降维的维度,默认是None
    squeeze的主要作用是降维。

示例展示

x = torch.zeros(2, 1, 2, 1, 2)
print(x.shape)
x = x.squeeze()
print(x)
print(x.shape)

在这里插入图片描述

x = torch.zeros(2, 1, 2, 1, 2)
print(x.shape)
x = x.squeeze(0)
print(x.shape)
x = x.squeeze(1)
print(x.shape)

在这里插入图片描述
多维张量本质上就是一个变换,如果维度是 1 ,那么,1 仅仅起到扩充维度的作用,而没有其他用途,因而,在进行降维操作时,为了加快计算,是可以去掉这些 1 的维度。
在多维张量中,如果某一个维度是1,那么这个维度是为了扩充维度,所以为了加快计算,进行降维操作时可以去掉1的维度。

2. torch.unsqueeze

torch.squeeze是为了降维,那么torch.unsqueeze是了升维。
torch.unsqueeze(input, dim)

  • input:输入的张量
  • dim:插入维度的索引,默认是None

示例展示

x = torch.tensor([1, 2, 3, 4])
print(x)
print(x.size())
print('*'*50)
x = x.unsqueeze(1)
print(x)
print(x.size())

在这里插入图片描述

3. squeeze_和unsqueeze_

squeeze_和unsqueeze_分别在squeeze和unsqueeze的基础上增加下划线,区别在于是否改变原来张量。
加上“_”,将会直接改变原始张量,否则不直接改变原始张量。

示例展示

x = torch.zeros(2, 1, 2, 1, 2)
y = torch.zeros(2, 1, 2, 1, 2)
x_t = x.squeeze_(1)
y_t = y.squeeze(1)

print('squeeze原始张量:',y.size())
print('squeeze变化张量:',y_t.size())
print('squeeze_原始张量:',x.size())
print('squeeze_变化张量:',x_t.size())

在这里插入图片描述

x = torch.tensor([1, 2, 3, 4])
y = torch.tensor([1, 2, 3, 4])
x_t = x.unsqueeze(1)
y_t = y.unsqueeze_(1)

print('unsqueeze原始张量:',x.size())
print('unsqueeze变化张量:',x_t.size())
print('unsqueeze_原始张量:',y.size())
print('unsqueeze_变化张量:',y_t.size())

在这里插入图片描述

以上就是有关squeeze和unsqueeze的知识点,有啥问题欢迎提问😏!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hj_caas

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值