tensor维度变换

news2024/11/28 5:48:35
作用函数
不变大小改变shapeview / reshape
删减与增加维度squeeze / unsqueeze
维度扩展expand / repeat
矩阵转置,单次和多次交换操作t / transpose / permute

1、 view reshape

view与reshape效果一致,且可以通用。直接以view为例:

a = torch.rand(4,1,28,28)
a.view(4,28*28)

在这里插入图片描述

2、squeeze unsqueeze

① unsqueeze

新插入一个维度,这个维度的插入不会改变数据本身。
在a中插入维度指定索引:[-a.dim()-1, a.dim()+1)

a.shape
a.unsqueeze(0).shape
a.unsqueeze(-5).shape

a.unsqueeze(-1).shape
a.unsqueeze(4).shape

在这里插入图片描述
通过简单的数据例子理解增加维度的效果:

b = torch.tensor([1.2, 2.4])
#shape为(1,2)
b.unsqueeze(-1)
#将所有最小维度单位的元素再放入一个小盒子中,并不改变数据本身
b.unsqueeze(0)
#将所有维度数据整体放入一个大袋子中

在这里插入图片描述

②squeeze

与unsqueeze相反,挤压掉指定维度

b.squeeze(idx)
b = torch.rand(1, 32, 1, 1)
b.squeeze().shape #将其他维度都是1的给挤压掉
b.squeeze(0).shape
b.squeeze(-1).shape

在这里插入图片描述

3、expand repeat

在这里插入图片描述
expand与repeat之间,推荐使用expand。
expand改变了我们对数据的理解方式,但没有增加数据,repeat实实在在增加了数据,两种方法最终的效果是等效的,区别在于expand不会主动复制数据,只会在有需要的时候复制。

a = torch.rand(4, 32, 14, 14)

b.shape #(1, 32, 1, 1)

b.expand(4, 32, 14, 14).shape
#只有原维度是1在expand的时候不会报错,这里32不需要expand

b.expand(-1, 32, -1, -1).shape
#-1表示保持原维度大小不变,这里只改变第二维度,从32变为32,相当于没变

在这里插入图片描述

# repeat函数中输入的参数不是要变换得到的维度大小,而是copy的次数

b.repeat(4,1,14,14)
第一维度复制4次,三四维度复制14

在这里插入图片描述

4、t transpose permute

① .t

该方法只能适用于2D的tensor,即只能适用于矩阵

a = torch.randn(3, 4)
a.t().shape

在这里插入图片描述

② transpose

要人为跟踪好维度顺序
原为 [b, c, h, w] -> 索引1、3维度交换顺序后为 [b, w, h, c]
!要变回原shape,一定要保证w和h的顺序不乱!

a.shape # [4, 3, 32, 32]

a1 = a.transpose(1, 3).contiguous().view(4, 3*32*32).view(4, 3, 32, 32)
# 加入contiguous函数避免数据顺序问题报错
#a1中的 3*32*32,是c*w*h,顺序不对

a2 = a.transpose(1, 3).contiguous.view(4, 3*32*32).view(4,32*32*3).transpose(1,3)
#a2中的32*32*3是w*h*c,此时在1、3交换,就变回原来的a

# 验证a1和a2与a的数据一致性关系
torch.all(torch.eq(a, a1))
torch.all(torch.eq(a, a2))

在这里插入图片描述

③ permute

permute使用相对简单且易理解

以dim=4的张量b为例
b = torch.rand(4, 3, 28, 32)
b.permute(0, 23, 1)
# [b, c, w, h],只想让c的维度移到后面,图片信息w和h的顺序不变,直接指定索引变换,c对应的维度索引为1,移动到最后。
transpose等效操作:
b.transpose(1,3).transpose(1,2)

在这里插入图片描述

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

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

相关文章

CH08_搬迁特性

搬迁函数(Move Function) 曾用名:搬迁函数(Move Method) class Account{get overdraftCharge(){...}... }class AccountType{get overdraftCharge(){...}... }动机 模块化是优秀软件设计的核心所在,好的模…

C语言自定义类型讲解:结构体,枚举,联合(2)

🐵本篇文章将会对位段、枚举和联合的相关知识进行讲解 1. 位段📚 1.1 什么是位段 位段的声明和结构体类似,但是有两点不同: 1.位段的成员必须是int,unsigned int,signed int (C99之后也可以是其他成员&am…

Redis 线程模式

Redis 是单线程吗? Redis 单线程指的是 [接收客户端请求 -> 解析请求 -> 进行数据读写操作 -> 发送数据给客户端] 这个过程是由一个线程 (主线程) 来完成的,这也是常说的 Redis 是单线程的原因。 但是 ,Redis 程序不是单线程的&am…

nginx 反向代理 负载均衡 动静分离

一样东西的诞生通常都是为了解决某些问题,对于 Nginx 而言,也是如此。 比如,你出于无聊写了一个小网站,部署到 tomcat 之后可以正常访问 但是后来,你的这个小网站因为内容很诱人逐步的火了,用户越来越多&a…

C#开发的OpenRA游戏之雷达地图

C#开发的OpenRA游戏之雷达地图 从前面的游戏里,就可以看到在上面按钮下面留有一个区域,这个区域的作用,就是用来显示一个雷达地图,如下图所示: 从雷达地图来看,可以清楚地看到全局的动态,自己的兵力分布,还有自己的建筑分布,矿产分布等等。 在这里就来对这个雷达地图…

Python编程:使用PIL进行JPEG图像压缩的简易教程

摘要: 本文介绍了如何使用Python编程语言和wxPython图形用户界面库进行JPEG图像的压缩。通过添加滑块控件,我们可以调整压缩质量,并将压缩后的照片另存为原来的名称加上后缀"压缩质量数字"的新文件。 C:\pythoncode\new\image2small.py 完整…

AI编程助手 Amazon CodeWhisperer 全面解析与实践

目录 引言Amazon CodeWhisperer简介智能编程助手智能代码建议代码自动补全 提升代码质量代码质量提升安全性检测 支持多平台多语言 用户体验和系统兼容性用户体验文档和学习资源个性化体验系统兼容性 功能全面性和代码质量功能全面性代码生成质量和代码安全性 CodeWhisperer的代…

程序启动-大数据平台搭建

1、启动zookeeper集群 /home/cluster/zookeeper.sh start /home/cluster/zookeeper.sh stop 2、启动hadoop和yarn集群 /home/cluster/hadoop-3.3.6/sbin/start-dfs.sh /home/cluster/hadoop-3.3.6/sbin/start-yarn.sh /home/cluster/hadoop-3.3.6/sbin/stop-dfs.sh /home/clust…

以太坊代币标准ERC20、ERC165、ERC721

两个概念 ERC(Ethereum Request for Comment) 以太坊意见征集稿EIP(Ethereum Improvement Proposals)以太坊改进提案 ERC和EIP用于使得以太坊更加完善;在ERC中提出了很多标准,用的最多的标准就是它的Token标准; 有哪些标准详细见https://eips.ethereum…

预制菜行业数据分析(京东数据挖掘)

最近一段时间,关于预制菜进校园事件的讨论热度高涨。而这两天,核酸大王“张核子”转行开预制菜公司卖方便米饭的消息又被传出,直接让预制菜市场饱受关注。 “预制菜是近两年的风口”,这个结论鲸参谋早在以往的内容中专门讨论过&a…

Java 18的未来:新特性和编程实践

文章目录 引言新特性预览1. 基于值的类的进一步改进2. 模式匹配的增强3. 新的垃圾回收器4. 扩展的模块系统5. 更强大的异步编程 编程实践示例1:基于值的类示例2:模式匹配的增强示例3:新的垃圾回收器 结论 🎉欢迎来到Java学习路线专…

python机器学习融合模型:Stacking与Blending(附代码)

1 堆叠法Stacking 一套弱系统能变成一个强系统吗? 当你处在一个复杂的分类问题面前时,金融市场通常会出现这种情况,在搜索解决方案时可能会出现不同的方法。 虽然这些方法可以估计分类,但有时候它们都不比其他分类好。在这种情况…

[WUSTCTF2020]颜值成绩查询 布尔注入二分法

这道题很简单 就是sql注入 我们来学习一下如何写盲注脚本 ?stunum1 ?stunum123 正确回显 100 错误 显示 not 。。。 这里很显然就是盲注了 我们来写个语句查询 if(ascii(substr(database(),1,1))>1,1,0)发现回显了 我们可以开始编写脚本跑了 import requests impor…

DeepMind 利用无监督学习开发 AlphaMissense,预测 7100 万种基因突变

类基因组共有 31.6 亿个碱基对,无时无刻不在经历复制、转录和翻译,也随时有着出错突变的风险。 错义突变是基因突变中的一种常见形式,然而人类目前只观察到了其中的一小部分,能够解读的更是只有 0.1%。 准确预测错义突变的作用&am…

Windows10/11显示文件扩展名 修改文件后缀名教程

前言 写这篇文章的原因是由于我分享的教程中的文件、安装包基本都是存在阿里云盘的,下载后需要改后缀名才能使用。 但是好多同学不会改。。 Windows 10 随便打开一个文件夹,在上方工具栏点击 “查看”点击 “查看” 后下方会显示更详细的工具栏然后点…

剪映软件专业版的操作与使用,电脑版与手机版APP同步讲解

一、教程描述 什么是剪映?抖音官方推出的一款视频编辑工具,用于短视频的剪辑制作和在线发布,主要在手机端使用,同时支持PC端,操作简单易上手,功能也十分强大,使用过剪映的用户,都将…

ViT细节与代码解读

最近看到两篇解读ViT很好的文章,备忘记录一下: 先理解细节 1:再读VIT,还有多少细节是你不知道的 再理解代码 1:ViT源码阅读-PyTorch - 知乎

此芯科技加入百度飞桨硬件生态共创计划,加速端侧AI生态布局

近日,此芯科技(上海)有限公司(以下简称“此芯科技”)与百度签署硬件生态共创计划合作协议,正式加入由百度发起的硬件生态共创计划。双方将共同推动端侧AI和大模型在个人计算、车载计算以及元宇宙计算等领域…

Spring中是否可以存在两个相同ID的bean

文章目录 一、在同一个xml配置文件里配置两个相同ID的bean结论验证过程源码 二、在不同xml配置文件里配置两个相同ID的bean结论验证过程源码 三、在同一个配置类中以Bean方式添加两个名称相同的bean结论验证过程源码 四、在不同配置类中以Bean方式添加两个名称相同的bean结论验…

基础设施建设-企业级全栈测试平台的最佳实践

QECon(Quality Efficiency Conference)质量效能大会在上海正式开幕!本次大会以"数生智慧:高质量发展新引擎"为主题,深入探讨如何借助数字化和智能化技术推动软件质量的发展,为高质量经济发展提供…