一文解释pytorch 中的 squeeze() 和 unsqueeze()函数(全网最详细版)
🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀零基础入门PyTorch框架_十二月的猫的博客-CSDN博客💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光
目录
1. 前言
2. torch.squeeze(A,dim=a)
3. torch.unsqueeze(A,dim=a)
4. 总结
1. 前言
- 👑《零基础入门PyTorch》专栏持续更新中,未来最少文章数量为60篇。由于专栏刚刚建立,促销价为9.9。后续将慢慢恢复原价至99.9🍉【在校大学生】评论区留言并私信我免费订阅
- 👑《零基础入门PyTorch》专栏主要针对零基础入门的小伙伴。不需要Python基础,不需要深度学习基础,只要你愿意学,这一个专栏将真正让你做到零基础入门。
- 🔥每例项目都包括理论讲解、数据集、源代码。
正在更新中💹💹
🚨项目运行环境:
- 平台:Window11
- 语言环境:Python3.8
- 运行环境1:PyCharm 2021.3
- 运行环境2:Jupyter Notebook 7.3.2
- 框架:PyTorch 2.5.1(CUDA11.8)
首先来看squeeze单词的含义:
关注一个词:挤压——》衍生到人工智能中:降维
再来看看unsqueeze单词的含义:
关注一个词:解压——》衍生到人工智能中:升维
2. torch.squeeze(A,dim=a)
torch.squeeze()函数的作用:减少张量维度
torch.squeeze(A, a)函数的参数:A为要处理的张量,a表示压缩的维度(a=0表示压缩第一个维度)
注:
- 压缩操作只能针对维数为1的维度进行。
- 如果指定的维度的维数大于1,那么操作将无效。
- 如果不指定维度N,那么默认选择所有维度,也就是将删除所有维数为1的维度。
🌟不指定维度,默认选择所有维度压缩。例如:一个1×1×2×3的tensor,squeeze()之后便成了2×3。存储的数据并没有发生变化,但是去除了“多余”的维度信息:
import torch
a = torch.Tensor([[[[4,3,4],[1,2,3]]]])
print(a.size())
b = torch.squeeze(a) #如果不指定维度N,那么将压缩所有维度为1的维度
print(b.size())
🌟如果维度的维数为1,则不会进行任何操作。例如:一个2×2 的tensor,squeeze()之后还是2×2:
import torch
x = torch.rand(2, 2)
print(x.size())
x = x.squeeze()
print(x.size())
🌟指定维度压缩。如果被指定的维度其维数为1,则压缩,反之不对该维度操作。例如:一个 1×1×2×3的tensor 指定第三个维度,由于其维数为2,因此不做压缩;指定第一个维度,由于其维数为1,因此做压缩:
import torch
a = torch.Tensor([[[[4,3,4],[1,2,3]]]])
print(a.size())
b = torch.squeeze(a) #如果不指定维度N,那么将压缩所有维度为1的维度
print(b.size())
c = torch.squeeze(a,2) # 指定维度压缩。如果被指定的维度的维数为1,则压缩,反之不对该维度操作:
print(c.size())
d = torch.squeeze(a,0) # 指定维度压缩。如果被指定的维度的维数为1,则压缩,反之不对该维度操作:
print(d.size())
3. torch.unsqueeze(A,dim=a)
torch.unsqueeze
是 PyTorch 中的一个函数,用于在指定的维度上插入一个大小为1的维度
对于改变张量的形状(形状变换)非常有用,特别是在需要对张量的形状进行匹配以便进行后续操作时
大致用法如下:
torch.unsqueeze(input, dim)
input
:输入的张量。dim
:要插入的维度索引。索引计算从0开始,若是负数则从末尾开始计算。
🌟在零维度上插入一个新维度
import torch
# 创建一个1D张量
x = torch.tensor([1, 2, 3])
print("原始张量:", x)
print("原始张量形状:", x.size())
# 在0维度上插入一个新的维度
x_unsqueezed = torch.unsqueeze(x, 0)
print("插入新维度后的张量:", x_unsqueezed)
print("插入新维度后的张量形状:", x_unsqueezed.size())
🌟在第一维度上插入一个新维度
import torch
# 创建一个1D张量
x = torch.tensor([1, 2, 3])
print("原始张量:", x)
print("原始张量形状:", x.shape)
# 在1维度上插入一个新的维度
x_unsqueezed = torch.unsqueeze(x, 1)
print("插入新维度后的张量:", x_unsqueezed)
print("插入新维度后的张量形状:", x_unsqueezed.shape)
🌟在一维张量中在第二维度插入一个新维度(第一维度并没有插入)
import torch
# 创建一个1D张量
x = torch.tensor([1, 2, 3])
print("原始张量:", x)
print("原始张量形状:", x.shape)
# 在1维度上插入一个新的维度
x_unsqueezed = torch.unsqueeze(x, 2)
print("插入新维度后的张量:", x_unsqueezed)
print("插入新维度后的张量形状:", x_unsqueezed.shape)
4. 总结
如果想要学习更多pyTorch的知识,大家可以点个关注并订阅,持续学习、天天进步
你的点赞就是我更新的动力,如果觉得对你有帮助,辛苦友友点个赞,收个藏呀~~~