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可对任意高维矩阵进行转置

相关推荐
GIS数据转换器2 分钟前
城市生命线安全保障:技术应用与策略创新
大数据·人工智能·安全·3d·智慧城市
无须logic ᭄5 分钟前
CrypTen项目实践
python·机器学习·密码学·同态加密
Channing Lewis18 分钟前
flask常见问答题
后端·python·flask
Channing Lewis19 分钟前
如何保护 Flask API 的安全性?
后端·python·flask
水兵没月1 小时前
钉钉群机器人设置——python版本
python·机器人·钉钉
一水鉴天1 小时前
为AI聊天工具添加一个知识系统 之65 详细设计 之6 变形机器人及伺服跟随
人工智能
我想学LINUX2 小时前
【2024年华为OD机试】 (A卷,100分)- 微服务的集成测试(JavaScript&Java & Python&C/C++)
java·c语言·javascript·python·华为od·微服务·集成测试
数据小爬虫@5 小时前
深入解析:使用 Python 爬虫获取苏宁商品详情
开发语言·爬虫·python
健胃消食片片片片5 小时前
Python爬虫技术:高效数据收集与深度挖掘
开发语言·爬虫·python
井底哇哇7 小时前
ChatGPT是强人工智能吗?
人工智能·chatgpt