Pytorch下张量的形状操作(详细)

目录

一、基本操作函数

二、分类:维度改变,张量变形,维度重排

2.1维度改变

2.2张量变形

2.3维度重排

三、实例


一、基本操作函数

在PyTorch中,对张量的形状进行操作是常见的需求,因为它允许我们重新组织、选择和操纵数据,以适应各种模型和函数的需求。以下是一些基本的形状操作函数:

  1. view(): 该方法用于重塑张量。它返回一个新的张量,其数据与原张量相同,但形状不同。你需要保证新形状与原始形状的总元素数相同。

  2. reshape(): 与view()类似,reshape()也可以改变张量的形状。不同之处在于,reshape()可以处理不连续的张量,而view()要求内存中的数据必须是连续的。

  3. squeeze(): 用于去除张量形状中所有的单维度条目,例如将形状为(1, A, 1, B)的张量压缩成(A, B)

  4. unsqueeze(): 在指定位置增加一个尺寸为1的新维度,例如将形状为(A, B)的张量扩展为(1, A, B)(A, 1, B)等。

  5. permute(): 用于重新排列张量的维度。例如,可以将一个形状为(A, B, C)的张量重排为(B, C, A)

  6. transpose(): 用于交换张量的两个维度。通常用于二维张量,但也可以用于多维。

  7. contiguous(): 使张量在内存中连续存储,通常在调用view()之前使用,如果张量在内存中不连续。

  8. size(): 返回张量的形状。

  9. dim(): 返回张量的维度数。

二、分类:维度改变,张量变形,维度重排

2.1维度改变

维度改变指的是增加或减少张量的维度数目。常见的操作有:

  • unsqueeze():在指定的维度处增加一个尺寸为1的新维度,通常用于为已有数据添加批处理维度或其他需要的单独维度。
  • squeeze():去除张量中所有长度为1的维度,或者在指定位置去除单独的长度为1的维度。这常用于去除多余的维度,简化数据结构。

2.2张量变形

张量变形是调整张量内部元素的排列顺序但保持总元素数量不变。这类操作包括:

  • view():重塑张量到一个指定的形状。此操作要求原始数据在内存中连续,如果不连续,通常需要先调用contiguous()
  • reshape():功能与view()相似,但可以自动处理数据的连续性问题。它在不改变数据的总元素数的情况下更改形状。

2.3维度重排

维度重排涉及调整张量的维度顺序,这在处理不同数据格式时特别有用,比如从NCHW转换到NHWC。相关操作包括:

  • transpose():用于交换张量中的两个维度。它特别常用于处理2D数据,如在矩阵转置中。
  • permute():更一般化的维度交换操作,可以一次性重新排序多个维度。这使得它非常灵活,适用于复杂的多维数据重排需求。

三、实例

这里将通过一个简单的Python例子来展示如何在PyTorch中使用上述的张量操作函数。我们将创建一个张量,然后对其进行维度改变、张量变形和维度重排的操作。

假设我们正在处理图像数据,我们有一个表示多个RGB图像的4维张量,形状为(batch_size, channels, height, width)。我们将执行以下步骤:

  1. 增加一个维度来表示时间序列(例如视频帧)。
  2. 将张量展平,以便可以将其用于全连接层。
  3. 将通道置于最后(从NCHW到NHWC格式)。

代码:

import torch# 创建一个初始张量,形状为 (batch_size, channels, height, width)
batch_size, channels, height, width = 3, 3, 240, 320
x = torch.randn(batch_size, channels, height, width)# 增加一个时间维度,假设每个批次有5帧
time_steps = 5
x = x.unsqueeze(1)  # 在第二个维度处增加
x = x.expand(-1, time_steps, -1, -1, -1)  # 将新维度扩展到5# 输出增加时间维度后的张量形状
print("Shape after adding time dimension:", x.shape)# 交换维度,将通道从第三位置移到最后
x = x.permute(0, 1, 3, 4, 2)  # 结果的形状将是(batch_size, time_steps, height, width, channels)
print("Shape after permuting:", x.shape)# 展平张量,除批次和时间维度外
x = x.reshape(batch_size, time_steps, -1)  # -1会自动计算需要的大小
print("Shape after flattening:", x.shape)

说明:

  • 首先,我们创建了一个随机的张量x,代表了一个批次中的多个RGB图像。
  • 接着,我们在unsqueeze()中增加了一个时间维度,并用expand()方法填充这个维度,模拟一个时间序列数据。
  • 然后,我们用reshape()方法将除时间和批次外的其他维度合并,为后续的神经网络层准备。
  • 最后,我们使用permute()重新排列维度,将通道放到最后,这对某些图像处理库更为友好。

结果:

  • 增加时间维度后:形状是(3, 5, 3, 240, 320),表示有3个批次,每批有5帧,每帧3个通道,每通道240x320像素。
  • 交换维度后:形状是(3, 5, 240, 320, 3),其中通道被移到了最后。
  • 展平操作后:形状是(3, 5, 230400),表示每批每帧的所有像素值和通道都被展平。

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

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

相关文章

大模型训练及推理【硬件选型指南】及 GPU 通识

我们在做大模型应用部署时(如训练、微调、RAG),往往需要在前期就分析好硬件选型指标,或者我们给客户报方案之前,可能你已经有了一个方案,但是由于实践经验缺乏,不知道在硬件上该如何评估并上报。…

CTF练习-BUUCTF(1~25)

文章目录 Crypto题目1 一眼就解密题目解题思路flag 题目2 md5题目解题思路flag 题目3 Url编码题目解题思路flag 题目4 看我回旋踢题目解题思路1解题思路2flag 题目5 摩丝题目解题思路flag 题目6 passwd题目解题思路flag 题目7 变异凯撒题目解题思路flag 题目8 Quoted-printable…

AJAX——封装_简易axios

1.简易axios_获取身份列表 需求:基于Promise XHR 封装 myAxios函数,获取省份列表展示 步骤: 1.定义 myAxios函数,接收配置对象,返回Promise对象 2.发起XHR请求,默认请求方法为GET 3.调用成功/失败的处…

Python与数据库连接

新建表boss create table 创建表 Code import pymysqlcon pymysql.connect(hostlocalhost,\userroot,\password,\port3306,\dbbusiness) cursorcon.cursor() cursor.execute(create table if not exists boss(id int auto_increment primary key,name varchar(20)not null…

WPF2 样式布局

样式布局 WPF中的各类控件元素, 都可以自由的设置其样式。 诸如: 字体(FontFamily) 字体大小(FontSize) 背景颜色(Background) 字体颜色(Foreground) 边距(Margin) 水平位置(HorizontalAlignment) 垂直位置(VerticalAlignment) 等等。 而样式则是组织和重用以上的重要工具。…

Docker基础+虚拟化概念

目录 一、虚拟化简介 1、虚拟化概述 2、cpu的时间分片(cpu虚拟化) 3、cpu虚拟化性性能瓶颈 4、虚拟化工作 4.1虚拟机工作原理 4.2两大核心组件:QEMU、KVM 4.2.1QEMU: 4.2.2KVM: 5、虚拟化类型 ①全虚拟化: …

国内开通chatgpt plus会员方法

ChatGPT镜像 今天在知乎看到一个问题:“平民不参与内测的话没有账号还有机会使用ChatGPT吗?” 从去年GPT大火到现在,关于GPT的消息铺天盖地,真要有心想要去用,途径很多,别的不说,国内GPT的镜像…

微软如何打造数字零售力航母系列科普02 --- 微软低代码应用平台加速企业创新 - 解放企业数字零售力

微软低代码应用平台推动企业创新- 解放企业数字零售力 微软在2023年GARTNER发布的魔力象限图中处于头部领先(leader)地位。 其LCAP产品是Microsoft Power Apps,扩展了AI Builder、Dataverse、Power Automate和Power Pages,这些都包…

Vue3 Vite配置环境变量

Vue3 Vite配置环境变量 相关文档配置.env文件vite.config.jspackage.json 使用 相关文档 Vite 官方中文文档:https://cn.vitejs.dev/环境变量和模式:https://cn.vitejs.dev/guide/env-and-mode.html#env-file在配置中使用环境变量:https://c…

SCADA系统通过巨控GRM模块实现OPC协议远程监控PLC

SCADA系统和PLC不在同一个地方,需要远程监控和控制PLC,可以通过巨控GRM模块来实现,通过OPC协议转巨控服务器远程读写PLC寄存器,从而完成远程监控PLC。 要实现SCAKDA系统远程监控PLC,关键是要实现SKADA能通过互联网访问…

都2024 年了,可以卸载的VS Code 插件

在 VS Code 中,庞大的插件市场提供了丰富多样的扩展功能,以增强编码体验和效率。然而,如果你安装了很多插件,就可能会导致: 性能下降:过多的插件可能导致 VS Code 的启动速度变慢,特别是在启动或…

[2021最新]大数据平台CDH存储组件kudu之启用HA高可用(添加多个master)

今天在做kudu高可用的时候没有参考官网,直接按照常规方式(添加角色—>编辑属性—>启动)结果发现报错?然后参考了一下文档之后发现这玩意儿还有点玄学,做一下记录。 1.添加两个master。kudu master有leader和foll…

用云手机运营TikTok有什么好处?

在数字化浪潮的推动下,社交媒体平台正重塑商业推广与品牌建设的面貌。TikTok,这款全球热门的短视频应用,已经吸引了亿万用户的瞩目。对于出海电商和品牌推广而言,借助云手机运营TikTok,能够解锁更多潜在可能&#xff0…

【Linux开发 第十二篇】搭建JavaEE环境

搭建开发环境 搭建javaEE环境 搭建javaEE环境 在Linux下开发JavaEE需要安装软件包: 安装jdk 安装步骤: 在opt目录下创建jdk目录通过xftp上床到jdk目录中进入到jdk目录中,解压jdk压缩包在/usr/local下创建java目录将解压完成的jdk文件移动…

【MySQL | 第六篇】数据库三大范式

文章目录 6.数据库设计三大范式6.1第一范式6.2第二范式6.3第三范式6.4反范式设计 6.数据库设计三大范式 6.1第一范式 第一范式(1NF):确保每列的原子性(强调的是列的原子性,即列不能够再分成其他几列)。实际上,第一范式…

react学习(一)之初始化一个react项目

React 是一个用于构建用户界面(UI)的 JavaScript 库,用户界面由按钮、文本和图像等小单元内容构建而成。React 帮助你把它们组合成可重用、可嵌套的 组件。从 web 端网站到移动端应用,屏幕上的所有内容都可以被分解成组件&#xf…

在React Router 6中使用useRouteLoaderData钩子获取自定义路由信息

在 React Router 6 中怎么像vueRouter一样,可以在配置路由的时候,定义路由的元信息(附加信息)?答案是可以的。稍有些复杂。核心是通过为每个路由定义了一个 loader 函数,用于返回自定义的路由信息,然后通过useRouteLoaderData 钩子…

虚拟机扩容方法

概述 我的虚拟机开始的内存是40G,接下来要扩成60GB 扩容步骤 步骤1 步骤2 步骤3 修改扩容后的磁盘大小,修改后的值只可以比原来的大,修改完成后点击扩展,等待扩展完成 步骤4 虽然外面扩展成功,但是新增的磁盘空间虚拟机内部还…

GHO文件安装到Vmware的两种姿势

1、使用 Ghost11.5.1.2269 将gho转换为vmdk文件(虚拟机硬盘),Vmware新建虚拟机自定义配置,然后添加已有的虚拟硬盘文件。 注意ghost的版本,如果你是用Ghost11.5备份的gho文件,再用Ghost12把gho文件转换为vmdk,则vmdk文…

Sound Siphon for Mac:音频处理与录制工具

Sound Siphon for Mac是一款专为Mac用户设计的音频处理与录制工具,以其出色的性能、丰富的功能和简便的操作而备受赞誉。 Sound Siphon for Mac v3.6.8激活版下载 该软件支持多种音频格式,包括MP3、WAV、AAC、FLAC等,用户可以轻松导入各种音频…