当前位置: 首页 > article >正文

一文解释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的维度进行
  2. 如果指定的维度的维数大于1,那么操作将无效。
  3. 如果不指定维度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的知识,大家可以点个关注并订阅,持续学习、天天进步

你的点赞就是我更新的动力,如果觉得对你有帮助,辛苦友友点个赞,收个藏呀~~~


http://www.kler.cn/a/534292.html

相关文章:

  • 使用 ElementUI 和 Spring 实现稳定可靠的文件上传和下载功能
  • 手机上运行AI大模型(Deepseek等)
  • 初学 Xvisor 之理解并跑通 Demo
  • 【Leetcode】4. 寻找两个正序数组的中位数
  • 论deepseek软件底层原理
  • Spring @Lazy:延迟初始化,为应用减负
  • Docker基础以及单体实战
  • Node.js 与 PostgreSQL 集成:深入 pg 模块的应用与实践
  • 基于Ceph14对接openstack的Nova、Glance、Cinder服务为后端存储
  • [权限提升] Linux 提权 — 系统内核溢出漏洞提权
  • linux常用基础命令 最新
  • Java 微服务实用指南(一)
  • Node.js学习指南
  • 18爬虫:关于playwright相关内容的学习
  • ES6 对象扩展:对象简写,对象属性 表达式,扩展运算符 ...,Object.assign,Object.is,用法和应用场景
  • 教育邮箱免费使用Notion专业版,还能免费使用Azure和OpenAI!
  • [Leetcode]求最长公共前缀
  • Linux 安装 RabbitMQ
  • 高级java每日一道面试题-2025年01月28日-框架篇[SpringBoot篇]-如何使用Spring Boot实现异常处理?
  • 按月拆分工作表,报表清晰没烦恼-Excel易用宝
  • ubuntu22.40安装及配置静态ip解决重启后配置失效
  • Linux环境部署DeepSeek大模型
  • 深入解析:如何获取商品 SKU 详细信息
  • 双亲委派(jvm)
  • Anaconda中指定python版本安装langchain
  • Django框架丨从零开始的Django入门学习