pytorch学习记录2--tensor维度变化

  1. 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])

发布了7 篇原创文章 · 获赞 3 · 访问量 2508

猜你喜欢

转载自blog.csdn.net/qq_35515203/article/details/102732082