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

一文打通pytorch中几个常见的张量操作

在张量操作中,unsqueeze,squeeze,reshape,view

1. unsqueeze

  • 功能: 在指定维度上增加一个新的维度,通常用于将一维张量扩展为二维,以便符合批处理的要求。
  • 举例:
    import torchx = torch.tensor([1, 2, 3])  # Shape: (3,)
    y = x.unsqueeze(0)           # Shape: (1, 3)
    print(y)
    
    • 数值示例: x[1, 2, 3],形状为 (3,)。使用 unsqueeze(0) 后,形状变为 (1, 3),结果为 [[1, 2, 3]]

2. expand

  • 功能: 通过复制数据来扩展张量的尺寸,而不增加新的维度。它不会在内存中实际复制数据,而是通过广播机制实现。
  • 举例:
    import torchx = torch.tensor([1, 2, 3])   # Shape: (3,)
    y = x.unsqueeze(0)            # Shape: (1, 3)
    z = y.expand(3, 3)            # Shape: (3, 3)
    print(z)
    
    • 数值示例: y[[1, 2, 3]],形状为 (1, 3)。使用 expand(3, 3) 后,形状变为 (3, 3),结果为 [[1, 2, 3], [1, 2, 3], [1, 2, 3]]

3. reshape

  • 功能: 改变张量的形状,只要元素的总数保持不变。
  • 举例:
    import torchx = torch.tensor([1, 2, 3, 4])  # Shape: (4,)
    y = x.reshape(2, 2)             # Shape: (2, 2)
    print(y)
    
    • 数值示例: x[1, 2, 3, 4],形状为 (4,)。使用 reshape(2, 2) 后,形状变为 (2, 2),结果为 [[1, 2], [3, 4]]

4. view

  • 功能: 类似于 reshape,但要求张量在内存中是连续的。它改变张量的形状,但不改变数据的存储方式。
  • 举例:
    import torchx = torch.tensor([1, 2, 3, 4])  # Shape: (4,)
    y = x.view(2, 2)                # Shape: (2, 2)
    print(y)
    
    • 数值示例: x[1, 2, 3, 4],形状为 (4,)。使用 view(2, 2) 后,形状变为 (2, 2),结果为 [[1, 2], [3, 4]]

5. squeeze

  • 功能: 去除张量中尺寸为 1 的维度。
  • 举例:
    import torchx = torch.tensor([[[1, 2, 3]]])  # Shape: (1, 1, 3)
    y = x.squeeze()                  # Shape: (3,)
    print(y)
    
    • 数值示例: x[[[1, 2, 3]]],形状为 (1, 1, 3)。使用 squeeze() 后,形状变为 (3,),结果为 [1, 2, 3]

总结:

  • unsqueeze: 增加一个新维度。示例:从 [1, 2, 3] 变为 [[1, 2, 3]]
  • expand: 扩展现有维度的大小。示例:从 [[1, 2, 3]] 变为 [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
  • reshape: 重新排列数据的形状。示例:从 [1, 2, 3, 4] 变为 [[1, 2], [3, 4]]
  • view: 与 reshape 类似,但有内存连续性要求。示例:从 [1, 2, 3, 4] 变为 [[1, 2], [3, 4]]
  • squeeze: 删除尺寸为 1 的维度。示例:从 [[[1, 2, 3]]] 变为 [1, 2, 3]

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 第43集《大佛顶首楞严经》
  • 贪吃蛇游戏的实现:C++ 控制台版
  • PyTorch:从零实现一个双向循环神经网络
  • MySQL-MHA高可用配置及故障切换
  • 凸分析与凸优化精解【1】
  • Oracle-OracleConnection
  • JavaScript高阶笔记总结(Xmind格式):第三天
  • 如何在阿里云环境中通过 Jenkins 实现 .NET Core 应用的 Docker 化部署:从 GitLab 拉取代码到自动化 CI/CD 流程的完整指南
  • x264 编码器 SSIM 算法源码分析
  • 【Python】基础语法介绍
  • Github Copilot 使用技巧
  • 连锁店收银系统源码
  • 介绍springmvc-水文
  • uni-app开发微信小程序注意事项,不要用element-ui
  • 【大模型理论篇】GPT系列预训练模型原理讲解
  • android图片蒙层
  • Angular 2 DI - IoC DI - 1
  • IndexedDB
  • Java新版本的开发已正式进入轨道,版本号18.3
  • js ES6 求数组的交集,并集,还有差集
  • Laravel 中的一个后期静态绑定
  • Linux中的硬链接与软链接
  • MySQL-事务管理(基础)
  • PAT A1017 优先队列
  • Ruby 2.x 源代码分析:扩展 概述
  • Vue 2.3、2.4 知识点小结
  • Vue2.x学习三:事件处理生命周期钩子
  • vue自定义指令实现v-tap插件
  • 成为一名优秀的Developer的书单
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 简单数学运算程序(不定期更新)
  • 面试遇到的一些题
  • 使用 Docker 部署 Spring Boot项目
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 问题之ssh中Host key verification failed的解决
  • 想写好前端,先练好内功
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • #控制台大学课堂点名问题_课堂随机点名
  • $(function(){})与(function($){....})(jQuery)的区别
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (11)MATLAB PCA+SVM 人脸识别
  • (floyd+补集) poj 3275
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (八十八)VFL语言初步 - 实现布局
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (三)终结任务
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (四)进入MySQL 【事务】
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .Net Core 中间件与过滤器
  • .net 生成二级域名
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖