torch.view、unsqueeze、reshape、transpose 和 permute

news/2025/3/26 0:12:28/文章来源:https://www.cnblogs.com/xiezhengcai/p/18792639

好的!在 PyTorch 中,调整张量形状和维度的常用操作包括 torch.viewunsqueezereshapetransposepermute。以下是它们的详细对比总结:


1. torch.view

  • 功能:调整张量形状,不改变数据顺序,要求张量是连续的(contiguous)。
  • 特点
    • 共享底层数据,修改新张量会影响原张量。
    • 如果张量不连续,需先调用 .contiguous()
  • 示例
    x = torch.arange(6)          # shape (6,)
    y = x.view(2, 3)             # shape (2, 3)
    

2. torch.reshape

  • 功能:类似 view,但自动处理非连续张量(必要时复制数据)。
  • 特点
    • 行为与 view 一致时共享数据,否则生成新张量。
    • 更通用,但可能有性能开销。
  • 示例
    x = torch.arange(6)
    y = x.reshape(2, 3)          # 结果同 view
    

3. torch.unsqueeze

  • 功能:在指定维度插入大小为 1 的维度。
  • 用途:扩展维度(如添加批次维度或适配广播)。
  • 示例
    x = torch.tensor([1, 2, 3])  # shape (3,)
    y = x.unsqueeze(0)           # shape (1, 3)
    

4. torch.transpose

  • 功能:交换两个指定维度,改变数据顺序
  • 特点
    • 返回的可能是非连续张量,需配合 .contiguous() 使用。
    • 共享底层数据(视图操作)。
  • 示例
    x = torch.randn(2, 3, 4)     # shape (2, 3, 4)
    y = x.transpose(0, 1)         # shape (3, 2, 4)(交换维度0和1)
    

5. torch.permute

  • 功能:按指定顺序重新排列所有维度,灵活调整维度顺序
  • 特点
    • transpose 更通用(可一次调整多个维度)。
    • 可能返回非连续张量,需配合 .contiguous()
  • 示例
    x = torch.randn(2, 3, 4)     # shape (2, 3, 4)
    y = x.permute(2, 0, 1)        # shape (4, 2, 3)
    

对比总结

方法 作用 是否共享数据 连续性要求 是否改变数据顺序 典型场景
view 调整形状 必须连续 高效调整连续张量形状
reshape 调整形状(更安全) 可能不共享 通用形状调整
unsqueeze 插入维度 扩展维度(如添加批次)
transpose 交换两个维度 交换维度(如矩阵转置)
permute 重新排列所有维度顺序 复杂维度重排(如通道顺序调整)

关键区别

  1. view vs reshape

    • view 要求张量连续,否则报错;reshape 自动处理非连续张量(可能复制数据)。
    • 优先用 view(高效),不确定连续性时用 reshape
  2. transpose vs permute

    • transpose 只能交换两个维度;permute 可一次性调整任意多个维度顺序。
    • 例如,将形状 (B, C, H, W) 转换为 (B, H, W, C)permute(0, 2, 3, 1)
  3. 是否改变数据顺序

    • view/reshape/unsqueeze 仅调整形状或扩展维度,不改变数据顺序
    • transpose/permute 改变数据顺序(维度交换后,内存布局可能不连续)。

常见问题

  1. 何时需要 contiguous()
    当使用 transposepermute 后,若需要调用 view,需先调用 .contiguous() 确保数据连续:

    x = x.permute(0, 2, 1).contiguous().view(-1, 10)
    
  2. 如何恢复原始维度顺序?
    使用 permutetranspose 的逆操作:

    x = torch.randn(4, 2, 3)
    y = x.permute(1, 2, 0)  # shape (2, 3, 4)
    z = y.permute(2, 0, 1)  # 恢复原状 (4, 2, 3)
    
  3. unsqueeze 的逆操作是什么?
    使用 squeeze 删除大小为 1 的维度:

    x = torch.randn(1, 3, 1, 4)
    y = x.squeeze()  # 删除所有大小为1的维度,shape (3, 4)
    

实际应用场景

  1. 图像维度调整

    • (N, H, W, C) 转换为 (N, C, H, W)(适配卷积输入):
      x = x.permute(0, 3, 1, 2)
      
  2. 矩阵转置

    • transpose 交换最后两个维度:
      x = torch.randn(3, 4)
      y = x.transpose(0, 1)  # shape (4, 3)
      
  3. 添加批次维度

    • 单样本数据增加批次维度:
      x = torch.randn(3, 224, 224)
      x = x.unsqueeze(0)  # shape (1, 3, 224, 224)
      

掌握这些操作能灵活处理张量形状和维度,适配不同模型的输入需求!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/905730.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

布局机器人,vivo用三十年技术沉淀回答“时代之问”

科技创新给产业界带来最大的影响就是“跨界焦虑”。不敢错过,这是企业面对风口的普遍心态。生怕一波没跟上,就被时代淘汰了。 但不错过,并不等于抓得住。比如元宇宙概念经历资本狂欢,无数科技巨头卷入,退潮时一地鸡毛。再比如在新能源汽车赛道卷起千亿投资风暴时,也有很多…

石油化工厂区防爆入侵报警系统

石油化工厂区防爆入侵报警系统采用AI智能防爆预警摄像头嵌入AI人体识别深度算法,对人体目标特征的检测分析识别预警。系统设备采用AI算法,通过大量真实的场景样本训练后,能够在各种应用场景下及时准确地对场景中发生的人体入侵行为发出告警信息。通过对实时视频图像进行智能…

矿山皮带运输机安全监测预警系统

智慧矿山皮带运输机安全监测预警系统是基于AI视频监测分析识别的智能皮带管理系统,该系统通过将人工智能识别算法提高实时分析的效率,达到现场快速识别、分析、预警的目的,为矿山皮带运输系统提供可视化的安全生产保障,该系统已经实现了皮带运输机大媒块、传输带异物、传输…

OP253自动安装凸轮弹簧常见问题

1.夹爪抓取弹簧后不停扔料 两台弹簧振动盘里面的弹簧是镜像件,如果出现混料被取走,会导致卷簧时卡死。夹爪夹住弹簧并提起时,有两个接近开关会检测弹簧是否正确,如果不正确,会将弹簧扔进废料桶。上图两个接近开关是埋入式,只有中心位置检测。应该左边不亮,右边亮,如果任…

web作业

制作一个学生管理系统包括按钮和输入框学生成绩管理系统body { font-family: Arial, sans-serif; margin: 20px } \3c pre>\3c code> h1 { text-align: center } .add-student, .search, .filters { margin-bottom: 20px } table { width: 100%; border-collapse: col…

linux主机新增硬盘与挂载

近期对工作站主机新增了硬盘,网上搜罗了一些教程,整合了一下,感谢相关博主的知识分享,本篇只是整合参考:https://zhuanlan.zhihu.com/p/117651379 https://cn.linux-console.net/?p=10440新增硬盘处理 新增硬盘后,在linux系统下输入 fdisk -l 命令查看当前磁盘信息可以看…

如何优化SQL查询以提高数据库性能?

你正在自助餐厅,所有的食物看起来都很美味。但你不是拿一个盘子,只取你需要的,而是开始从各个角落堆满食物,弄得一团糟,速度也慢了下来。结果是什么?你拿的东西很多并且效率低下。 这就像没有优化的SQL查询!它们加载了不必要的数据,拖慢了整个系统的速度,并在数据库中…

HTB Season7 Dog

一、信息收集 拿到ip,先测试一下连通性连通性正常,使用nmap扫描一下ip,输入nmap -sV -sC -A 10.10.11.58 -Pn 扫描发现http页面,并且发现了网页使用了BackDropCMS在hosts内添加添加页面,访问网页发现一个登录框,尝试一下sql注入无果,只能另寻出路此时dirsearch扫描发现了…

20242802 2023-2024-2《网络攻防实践》第四周作业

20242802 2023-2024-2 《网络攻防实践》第四周作业 1.实验内容与知识点整理TCP/IP参考模型 在TCP/IP参考模型中,去掉了OSI参考模型中的会话层和表示层(这两层的功能被合并到应用层实现)。同时将OSI参考模型中的数据链路层和物理层合并为主机到网络层,所以在TCP/IP参考模型中…

浅谈--Cache Design Pattern

🤔听说你用过Redis、Caffeine,那我问你你了解Cache Design Pattern吗?Look at my eyes。 今天就来聊聊Cache Design Pattern。Cache Design Pattern是缓存设计模式,是用于优化系统性能、减少资源消耗和提升响应速度的软件架构策略。主要有六大核心缓存模式。 Cache-Aside …

七、神经网络-非线性激活

小土堆视频:https://www.bilibili.com/video/BV1hE411t7RN?spm_id_from=333.788.videopod.episodes&vd_source=6cb513d59bf1f73f86d4225e9803d47b&p=19非线性变换的主要目的:引入非线性能力,使模型能够学习复杂的映射关系。如果没有非线性激活,神经网络本质上相当…