Pytorch List Tensor转Tensor,reshape拼接等操作

503 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。


Pytorch List Tensor转Tensor,reshape拼接等操作

持续更新一些常用的Tensor操作,比如List,Numpy,Tensor之间的转换,Tensor的拼接,维度的变换等操作。其它Tensor操作如 einsum等见:待更新。

其实推荐大家如果要学习一些api的用法的话,最好的方法,就是上官网,直接copy 例子下来,然后自己改一改直接实践一下,大约10分钟,就能学会。我这里主要是为了各位和自己的方便,记不住的时候,直接打开这个博客,把代码粘贴过去就可以用了。所以大家可以收藏起来,每次不记得怎么使用的话,就打开看看哦~~~

用到两个函数:torch.cat 和 torch.stack

(一) List Tensor转Tensor (torch.cat)

在这里插入图片描述

// An highlighted block
>>> t1 = torch.FloatTensor([[1,2],[5,6]])
>>> t2 = torch.FloatTensor([[3,4],[7,8]])
>>> l = []
>>> l.append(t1)
>>> l.append(t2)
>>> ta = torch.cat(l,dim=0)
>>> ta = torch.cat(l,dim=0).reshape(2,2,2)
>>> tb = torch.cat(l,dim=1).reshape(2,2,2)
>>> ta
tensor([[[1., 2.],
         [5., 6.]],

        [[3., 4.],
         [7., 8.]]])
>>> tb
tensor([[[1., 2.],
         [3., 4.]],

        [[5., 6.],
         [7., 8.]]])

高维tensor

** 如果理解了2D to 3DTensor,以此类推,不难理解3D to 4D,看下面代码即可明白:**

>>> t1 = torch.range(1,8).reshape(2,2,2)
>>> t2 = torch.range(11,18).reshape(2,2,2)
>>> l = []
>>> l.append(t1)
>>> l.append(t2)
>>> torch.cat(l,dim=2).reshape(2,2,2,2)
tensor([[[[ 1.,  2.],
          [11., 12.]],

         [[ 3.,  4.],
          [13., 14.]]],


        [[[ 5.,  6.],
          [15., 16.]],

         [[ 7.,  8.],
          [17., 18.]]]])
>>> torch.cat(l,dim=1).reshape(2,2,2,2)
tensor([[[[ 1.,  2.],
          [ 3.,  4.]],

         [[11., 12.],
          [13., 14.]]],


        [[[ 5.,  6.],
          [ 7.,  8.]],

         [[15., 16.],
          [17., 18.]]]])
>>> torch.cat(l,dim=0).reshape(2,2,2,2)
tensor([[[[ 1.,  2.],
          [ 3.,  4.]],

         [[ 5.,  6.],
          [ 7.,  8.]]],


        [[[11., 12.],
          [13., 14.]],

         [[15., 16.],
          [17., 18.]]]])

(二)List Tensor转Tensor (torch.stack)

在这里插入图片描述 代码:

import torch

t1 = torch.FloatTensor([[1,2],[5,6]])
t2 = torch.FloatTensor([[3,4],[7,8]])
l = [t1, t2]

t3 = torch.stack(l, dim=2)
print(t3.shape)
print(t3)

## output:
## torch.Size([2, 2, 2])
## tensor([[[1., 3.],
##          [2., 4.]],
##        [[5., 7.],
##         [6., 8.]]])