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

相关推荐
DeepVisionary4 小时前
谷歌 Gemini Omni 1.1 Flash 正式发布:4K 视频、40 秒场景延伸,视频生成进入按 token 计费时代
python·自动化
阡之尘埃4 小时前
Python数据分析案例85——大模型微调全流程(SFT的LoRA微调)
人工智能·python·深度学习·语言模型·llm·微调·千问
海兰4 小时前
【应用】基于 Next.js 16 + Python mplfinance的金融K线图与技术指标可视化平台(三)
javascript·python·金融
cvcode_study4 小时前
Ollama+ComfyUI 多模态
大数据·人工智能·python
星核0penstarry6 小时前
试一试用gr.Workflow把AI多步骤串联变成可视化画布
人工智能·python·ai作画·api·ai编程·工作流·api聚合平台
taller_20006 小时前
【005】PiE 与传统 VBA 的核心区别
python·vba·pie·py
海兰6 小时前
【应用】基于 Next.js 16 + Python mplfinance的金融K线图与技术指标可视化平台(一)
javascript·python·金融
大衛說6 小时前
《Python 从入门到精通》系列总览与学习路线
开发语言·python·学习
小猴子爱上树7 小时前
跨境电商翻译工具推荐:批量图片翻译、视频字幕翻译、智能抠图一站式搞定
人工智能·python·音视频
林澈在路上7 小时前
AI翻唱软件哪个好 2026国产AI写歌工具对比推荐
大数据·人工智能·深度学习·github·aigc·音视频·音频