pytorch tensor维度变换

目录

  • [1. view/reshape](#1. view/reshape)
  • [2. squeeze/unsqueeze](#2. squeeze/unsqueeze)
  • [3. expand 扩展](#3. expand 扩展)
  • [4. repeat](#4. repeat)
  • [5 .t转置](#5 .t转置)
  • [6. transpose](#6. transpose)
  • [7. permute](#7. permute)

1. view/reshape

view(*shape) → Tensor

作用:类似于reshape,将tensor转换为指定的shape,原始的data不改变。返回的tensor与原始的tensor共享存储区。返回的tensor的size和stride必须与原始的tensor兼容。每个新的tensor的维度必须是原始维度的子空间,或满足以下连续条件:

式1 张量连续性条件

否则需要先使用contiguous()方法将原始tensor转换为满足连续条件的tensor,然后就可以使用view方法进行shape变换了。或者直接使用reshape方法进行维度变换,但这种方法变换后的tensor就不是与原始tensor共享内存了,而是被重新开辟了一个空间。

torch.reshape(input, shape) → Tensor

与view方法类似,将输入tensor转换为新的shape格式。

但是reshape方法更强大,可以认为a.reshape = a.view() + a.contiguous().view()。

即:在满足tensor连续性条件时,a.reshape返回的结果与a.view()相同,否则返回的结果与a.contiguous().view()相同。

view/reshape的问题是会丢失维度信息,比如变化后的数据[4,784],而通过它是推不出原来的shape是[4,1,28*28]的,必须额外保存维度信息。

参考:【pytorch】view和reshape底层原理

2. squeeze/unsqueeze

unsqueeze增加维度,索引>=0时在索引之前插入,索引<0时,在索引之后插入

unsqueeze只改变维度不改变数据本身

实际应用的例子

squeeze减少维度,减少掉维度为1的维度,不输入参数时,它会减少掉所有能减掉的维度

3. expand 扩展

用于将张量中单数维的数据扩展到指定的size

只有维度是1的才可以扩展,当expand参数为-1时,保持原来的维度不扩展,负数其他值无意思。且扩展的Tensor不会分配新的内存,只是原来的基础上创建新的视图并返回,返回的张量内存是不连续的。类似于numpy中的broadcast_to函数的作用。如果希望张量内存连续,可以调用contiguous函数。

4. repeat

和expand()作用类似,均是将tensor扩展到新的形状

前文提及expand仅能作用于单数维,那对于非单数维的拓展,那就需要借助于repeat函数了。

tensor.repeat(sizes)参数 sizes指定了原始张量在各维度上复制的次数。整个原始张量作为一个整体进行复制,这与Numpy中的repeat函数截然不同,而更接近于tile函数的效果。

与expand不同,repeat函数会真正的复制数据并存放于内存中。repeat开辟了新的内存空间,torch.repeat返回的张量在内存中是连续的

5 .t转置

用于二维及以下的tensor转置

6. transpose

transpose方法的作用是交换矩阵的两个维度,transpose(dim0, dim1) → Tensor,transpose可能导致数据不连续,可调用.contiguous使数据变的连续

7. permute

torch.permute(input, dims) → Tensor

按照dims给定的dimension排列顺序,返回Tensor
t只用于二维及以下的tensor转置,transpose能操作2D矩阵的转置,在多维矩阵可以进行二维的转置,permute可对任意高维矩阵进行转置

相关推荐
新加坡内哥谈技术14 分钟前
Claude Code 的魔力
人工智能
北邮刘老师1 小时前
关于智能体互联协议标准的130天
人工智能·大模型·智能体·智能体互联网
人工干智能2 小时前
科普:Python 中,字典的“动态创建键”特性
开发语言·python
一条星星鱼2 小时前
深度学习是如何收敛的?梯度下降算法原理详解
人工智能·深度学习·算法
Elastic 中国社区官方博客3 小时前
AutoOps:简单的 Elasticsearch 集群监控与管理现已支持本地部署
大数据·人工智能·elasticsearch·搜索引擎·云计算·全文检索
金井PRATHAMA5 小时前
语义网络对人工智能自然语言处理中深层语义分析的影响与启示
人工智能·自然语言处理·知识图谱
程序猿阿伟5 小时前
《重构工业运维链路:三大AI工具让设备故障“秒定位、少误判”》
运维·人工智能·重构
开心-开心急了5 小时前
主窗口(QMainWindow)如何放入文本编辑器(QPlainTextEdit)等继承自QWidget的对象--(重构版)
python·ui·pyqt
yueyuebaobaoxinx5 小时前
聚焦技术落地,展现 AI 重构产业的实践路径。
人工智能·重构
算家云5 小时前
Sora 2 的社交野心:AI 如何重构内容社交产品逻辑?
人工智能·openai·算家云·租算力,到算家云·sora 2·ai社交