【无标题】PyTorch 常用算子说明

1.增加维度

print(a.unsqueeze(0).shape) # 在0号维度位置插入一个维度

print(a.unsqueeze(-1).shape) # 在最后插入一个维度

print(a.unsqueeze(3).shape) # 在3号维度位置插入一个维度

2.删减维度

a = torch.Tensor(1, 4, 1, 9)

print(a.squeeze().shape) # 能删除的都删除掉

print(a.squeeze(0).shape) # 尝试删除0号维度,ok

3.维度扩展(expand)

b = torch.rand(32)

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

先进行维度增加

b = b.unsqueeze(1).unsqueeze(2).unsqueeze(0)

print(b.shape)

再进行维度扩展

b = b.expand(4, -1, 14, 14) # -1表示这个维度保持不变,这里写32也可以

print(b.shape)

输出:

torch.Size([1, 32, 1, 1])

torch.Size([4, 32, 14, 14])

4.维度重复(repeat)

print(b.shape)

维度重复,32这里不想进行重复,所以就相当于"重复至1次"

b = b.repeat(4, 1, 14, 14)

print(b.shape)

输出:

torch.Size([1, 32, 1, 1])

torch.Size([4, 32, 14, 14])

5.转置

只适用于dim=2的Tensor。

c = torch.Tensor(2, 4)

print(c.t().shape)

输出:

torch.Size([4, 2])

  1. 维度交换

d = torch.Tensor(6, 3, 1, 2)

print(d.transpose(1, 3).contiguous().shape) # 1号维度和3号维度交换

输出:

torch.Size([6, 2, 1, 3])

7.permute

h = torch.rand(4, 3, 6, 7)

print(h.permute(0, 2, 3, 1).shape)

输出:

torch.Size([4, 6, 7, 3])

8.gather

1)input:输入

2)dim:维度,常用的为0和1

3)index:索引位置

a=t.arange(0,16).view(4,4)

print(a)

index_1=t.LongTensor([[3,2,1,0]])

b=a.gather(0,index_1)

print(b)

index_2=t.LongTensor([[0,1,2,3]]).t()#tensor转置操作:(a)T=a.t()

c=a.gather(1,index_2)

print(c)

outout输出:

tensor([[ 0, 1, 2, 3],

4, 5, 6, 7\], \[ 8, 9, 10, 11\], \[12, 13, 14, 15\]\]) tensor(\[\[12, 9, 6, 3\]\]) tensor(\[\[ 0\], \[ 5\], \[10\], \[15\]\]) 在gather中,我们是通过index对input进行索引把对应的数据提取出来的,而dim决定了索引的方式。 **9.Chunk** torch.chunk(tensor, chunks, dim=0) 在给定维度(轴)上将输入张量进行分块儿 直接用上面的数据来举个例子: l, m, n = x.chunk(3, 0) # 在 0 维上拆分成 3 份 l.size(), m.size(), n.size() (torch.Size(\[1, 10, 6\]), torch.Size(\[1, 10, 6\]), torch.Size(\[1, 10, 6\])) u, v = x.chunk(2, 0) # 在 0 维上拆分成 2 份 u.size(), v.size() (torch.Size(\[2, 10, 6\]), torch.Size(\[1, 10, 6\])) **10.Stack** 合并新增(stack) stack需要保证两个Tensor的shape是一致的。 c = torch.rand(4, 3, 32, 32) d = torch.rand(4, 3, 32, 32) print(torch.stack(\[c, d\], dim=2).shape) print(torch.stack(\[c, d\], dim=0).shape) 运行结果: torch.Size(\[4, 3, 2, 32, 32\]) torch.Size(\[2, 4, 3, 32, 32\]) **11.View** Pytorch中的view函数主要用于Tensor维度的重构,即返回一个有相同数据但不同维度的Tensor。 a3 = torch.tensor(\[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24\]) a4 = a3.view(4, -1) a5 = a3.view(2, 3, -1) 输出: #a3 tensor(\[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24\]) #a4 tensor(\[\[ 1, 2, 3, 4, 5, 6\], \[ 7, 8, 9, 10, 11, 12\], \[13, 14, 15, 16, 17, 18\], \[19, 20, 21, 22, 23, 24\]\]) #a5 tensor(\[\[\[ 1, 2, 3, 4\], \[ 5, 6, 7, 8\], \[ 9, 10, 11, 12\]\], \[\[13, 14, 15, 16\], \[17, 18, 19, 20\], \[21, 22, 23, 24\]\]\]) **12.reshape** 返回与 input张量数据大小一样、给定 shape的张量。如果可能,返回的是input 张量的视图,否则返回的是其拷贝。 a1 = torch.tensor(\[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12\]) a2 = torch.reshape(a1, (3, 4)) print(a1.shape) print(a1) print(a2.shape) print(a2) 运行结果: torch.Size(\[12\]) tensor(\[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12\]) torch.Size(\[3, 4\]) tensor(\[\[ 1, 2, 3, 4\], \[ 5, 6, 7, 8\], \[ 9, 10, 11, 12\]\]) 同view函数,也可以自动推断维度:a4 = torch.reshape(a1, (-1, 6))

相关推荐
酷飞飞14 小时前
Python网络与多任务编程:TCP/UDP实战指南
网络·python·tcp/ip
研梦非凡15 小时前
ICCV 2025|从粗到细:用于高效3D高斯溅射的可学习离散小波变换
人工智能·深度学习·学习·3d
数字化顾问15 小时前
Python:OpenCV 教程——从传统视觉到深度学习:YOLOv8 与 OpenCV DNN 模块协同实现工业缺陷检测
python
学生信的大叔16 小时前
【Python自动化】Ubuntu24.04配置Selenium并测试
python·selenium·自动化
诗句藏于尽头17 小时前
Django模型与数据库表映射的两种方式
数据库·python·django
通街市密人有17 小时前
IDF: Iterative Dynamic Filtering Networks for Generalizable Image Denoising
人工智能·深度学习·计算机视觉
智数研析社17 小时前
9120 部 TMDb 高分电影数据集 | 7 列全维度指标 (评分 / 热度 / 剧情)+API 权威源 | 电影趋势分析 / 推荐系统 / NLP 建模用
大数据·人工智能·python·深度学习·数据分析·数据集·数据清洗
扯淡的闲人17 小时前
多语言编码Agent解决方案(5)-IntelliJ插件实现
开发语言·python
moxiaoran575317 小时前
Flask学习笔记(一)
后端·python·flask
秋氘渔18 小时前
迭代器和生成器的区别与联系
python·迭代器·生成器·可迭代对象