【无标题】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))

相关推荐
结局无敌25 分钟前
React Native for OpenHarmony 实战:三方库 react-native-modal-dialog 的鸿蒙化适配指南
深度学习·算法·react native·react.js·harmonyos
在所不辞兄1 小时前
为什么神经网络对对抗扰动和分布偏移往往比较脆弱,而人类感知相对更鲁棒?
人工智能·深度学习·神经网络·机器学习
滴啦嘟啦哒1 小时前
【具身笔记】【π0.5 微调与仿真】五、在MuJoCo中实现可视化仿真
笔记·python·vla·具身
全栈练习生1 小时前
AI安全与红队测试
python·ai
费曼学习法1 小时前
把「发送成功」当「送达」?我排查 IM 长消息被静默吞掉的完整过程
python·ai编程·自动化运维
鸽鸽程序猿1 小时前
【项目】【在线判题系统】b端题目增删改
开发语言·python
NetX行者1 小时前
Python 工程化入门:从脚本到规范的 Python 项目结构
网络·python
szxinmai主板定制专家1 小时前
储能 EMS、微网控制器选型:RK3588、RK3576、RK3568+FPGA 怎么选?多网、多 CAN、EMC 设计权衡
人工智能·深度学习·机器学习·fpga开发·工业网关·rk3576·电力网关
MasonYyp2 小时前
asyncio并发协程
python
小小张说故事2 小时前
Python 的整数为什么永远不会溢出?拆开大整数对象,看 30 位一节的存储与运算代价
python