pytorch-Broadcasting自动拓展、拼接与拆分

什么是自动拓展

1.自动填充矩阵
在这里插入图片描述
Situation 1:
·[4,32,14,14]
·[1,32,1,1]=>[4,32,14,14]
Situation 2:
·[4,32,14,14]
·[14,14]=>[1,1,14,14]=>[4,32,14,14]
Situation 3:
·[4,32,14,14]
·[2,32,14,14]=>失败

import torch
a=torch.ones(2,3,4)
a
a.shape
b=torch.tensor([1.5])
c=torch.add(a,b)
c

结果:
在这里插入图片描述

x=torch.tensor([1.5,1.2])
x
y=torch.tensor([1.5],[1.2])
y
x+y
(x+y).shape

结果:
在这里插入图片描述
给我的感觉就是一横行下拉+一竖列左拉然后相加

拼接与拆分(Merge or split)

Cat Stack Split Chunk

先看Cat拼接

import torch
a=torch.rand(4,32,8)
b=torch.rand(5,32,8)
a.shape,b.shape
torch.cat([a,b],dim=0.shape)#按照维度拼接
torch.cat([a,b],dim=1.sahpe)#这个会失败,因为第一个维度不匹配后续无法拼接

在这里插入图片描述

为什么dim=1会失败

先看下图可知选中的维度得相同,其他的维度不匹配后续无法拼接
在这里插入图片描述
举个例子:

a1=torch.rand(4,3,32,32)
a2=torch.rand(4,1,32,32)
torch.cat([a1,a2],dim=1).shape
结果:torch.Size([4,4,32,32])

Stack

cat:沿着一个新维度对输入张量序列进行连接,序列中所有的张量应该为相同形状
stack:当想要加入一个新维度的时候需要stack
举个例子:

a1=torch.rand(5,3,32,32)
a2=torch.rand(5,3,32,32)
torch.stack([a1,a2],dim=2).shape
结果:torch.Size([5,3,2,32,32])

如果说下面这个例子:

a=torch.rand(31,8)
b=torch.rand(30,8)
torch.stack([a,b],dim=0).shape
结果:报错 因为a,b不一样	

拆分

x = torch.randn(3,10,6)
x.shape
a,b,c = x.split(1,0)#在0维进行间隔维1的拆分,把张量在0维度以上以间隔1来拆分,其中x在0维度上尺寸为3,就可以分成3份
a.size(),b.size(),c.size()
d,e = x.split(2,0)#在0维进行间隔为2的拆分
d.size(),e.size()#张量在0维度以上间隔2来拆分时,只能分成2份,且只能把面前部分先以间隔2来拆分,后面不足2的部分就直接作为一个分支
l,m,n=x.chunk(3,0)#在0维上拆分成3份
l.size(),m.size(),n.size()
u,v = x.chunk(2,0)#在0维上拆成2份
u.size(),v.size()

结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青灯有味是儿时

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值