-
view / reshape #改变维度为指定维度
- a=torch.rand(2,3,28,28)
- a.view(2,-1) .shape
- a.reshape(2,-1).shape
输出结果为:
torch.Size([2, 2352])
torch.Size([2, 2352])
2.squeeze / unsqueeze #压缩或扩展维度
squeeze用于维度压缩
- b=torch.rand(1,32,1,1)
- print(b.squeeze(0).shape) #若当前索引shape!=1,则不会变
输出结果为:
torch.Size([32, 1, 1])
unsqueeze用于维度扩张
- a=torch.rand(2,3,28,28)
- print(a.unSqueeze(0).shape) #在0上增加一个维度
输出结果:
torch.Size([1, 2, 3, 28, 28])
3.transpose / permute #张量维度转换
- transpose用来进行两维度之间转换
- t=torch.rand(3,3,28,28)
- t.transpose(0,2) #第0维和第2维进行交换
输出结果:
torch.Size([28, 3, 3, 28])
- permute可以用来进行多维度转换
- p=torch.rand(1,2,3,4)
- p.permute(3,2,1,0)
输出结果:
torch.Size([4, 3, 2, 1])
4. expand与repeat
- expand用于维度扩张,参数为扩张后维度
- e=torch.tensor([3,4])
- e.expand(3,2,2) #expand参数为扩张后维度
输出结果:
tensor([[[3, 4],
[3, 4]],[[3, 4],
[3, 4]],[[3, 4],
[3, 4]]])torch.Size([3, 2, 2])
- repeat函数用于维度扩张,参数为当前维度所要复制的次数
- r=torch.rand([3,4])
- r.repeat(2,3,3)
输出结果:
tensor([[[3, 4, 3, 4, 3, 4],
[3, 4, 3, 4, 3, 4],
[3, 4, 3, 4, 3, 4]],[[3, 4, 3, 4, 3, 4],
[3, 4, 3, 4, 3, 4],
[3, 4, 3, 4, 3, 4]]])torch.Size([2, 3, 6])
- cat 将两个tensor按照指定维度拼接起来、
- c1=torch.rand(4,32,8)
- c2=torch.rand(5,32,8)
- torch.cat([c1,c2],dim=0)
输出结果:
torch.Size([9, 32, 8])
stack
- split 将一个tensor按照指定维度和长度分开
- s1=torch.rand(6,3,16,32)
- aa,bb=s1.split([1,5],dim=0)
输出结果:
torch.Size([1, 3, 16, 32])
torch.Size([5, 3, 16, 32])
- s1=torch.rand(6,3,16,32)
- aa,bb=s1.split(3,dim=0) #所分长度相同则输入一个值即可
输出结果:
torch.Size([3, 3, 16, 32])
torch.Size([3, 3, 16, 32])
- chunk 将一个张量在指定维度分成n份 ,tensor.chunk(n,dim=dim)
- aa,bb,cc=s1.chunk(3,dim=1)
输出结果:
torch.Size([6, 1, 16, 32])
torch.Size([6, 1, 16, 32])
torch.Size([6, 1, 16, 32])